C#文件夾權限操作整理


using System.Security.AccessControl;
using System.IO;
using System.Security.Principal;

取得目錄的訪問控制和審核安全(ACL)

DirectorySecurity fileAcl = Directory.GetAccessControl(filePath);

文件夾權限繼承控制

fileAcl.SetAccessRuleProtection(true, true);//取消權限繼承,且保留繼承的訪問規則
fileAcl.SetAccessRuleProtection(true, true);//取消權限繼承,且移除繼承的訪問規則
fileAcl.SetAccessRuleProtection(false, true);//允許權限繼承,且忽略第二個參數

訪問規則訪問控制項創建

FileSystemAccessRule everyoneRule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow);
FileSystemAccessRule everyoneRule1 = new FileSystemAccessRule("Everyone", FileSystemRights.Modify, AccessControlType.Allow);
            //"Everyone"用戶賬戶名稱
            //FileSystemRights.FullControl 訪問規則
            //AccessControlType.Allow 允許訪問受保護對象,AccessControlType.Deny拒絕訪問受保護對象
SID也就是安全標識符(Security Identifiers),是標識用戶、組和計算機帳戶的唯一的號碼。在第一次創建該帳戶時,
將給網絡上的每一個帳戶發布一個唯一的 SID。Windows 2000 中的內部進程將引用帳戶的 SID 而不是帳戶的用戶或組名。
如果創建帳戶,再刪除帳戶,然后使用相同的用戶名創建另一個帳戶,則新帳戶將不具有授權給前一個帳戶的權力或權限,
原因是該帳戶具有不同的 SID 號。安全標識符也被稱為安全 ID 或 SID。

修改訪問控制列表(ACL)

            bool result = false;
            //將指定的授權規則添加到訪問控制列表 (ACL)。
            fileAcl.ModifyAccessRule(AccessControlModification.Add, everyoneRule,out result);

            //從 ACL 移除所含安全性標識符 (SID) 和訪問掩碼與指定授權規則一樣的授權規則。
            fileAcl.ModifyAccessRule(AccessControlModification.Remove, everyoneRule, out result);
           //從 ACL 移除所含 SID 與指定授權規則一樣的授權規則。
            fileAcl.ModifyAccessRule(AccessControlModification.RemoveAll, everyoneRule, out result);
            //從 ACL 移除與指定的授權規則完全匹配的授權規則。
            fileAcl.ModifyAccessRule(AccessControlModification.RemoveSpecific, everyoneRule, out result);

            //從 ACL 移除所含 SID 與指定授權規則一樣的授權規則,然后將指定的授權規則添加到 ACL。 
            fileAcl.ModifyAccessRule(AccessControlModification.Reset, everyoneRule, out result);
            //從 ACL 移除所有授權規則,然后將指定的授權規則添加到 ACL。
            fileAcl.ModifyAccessRule(AccessControlModification.Set, everyoneRule, out result);

            //權限追加
            fileAcl.AddAccessRule(everyoneRule);
            //權限刪除
            fileAcl.RemoveAccessRule(everyoneRule);
            //從當前文件或目錄移除所有匹配的允許或拒絕訪問控制列表 (ACL) 權限。
            fileAcl.RemoveAccessRuleAll(everyoneRule);
            //從當前文件或目錄移除指定用戶的所有訪問控制列表 (ACL) 權限。
            fileAcl.RemoveAccessRuleSpecific(everyoneRule);
            //從當前文件或目錄移除單個匹配的允許或拒絕訪問控制列表 (ACL) 權限。

遍歷ACL中的ACE

            AuthorizationRuleCollection rules = fileAcl.GetAccessRules(true, true, typeof(NTAccount));
            // AuthorizationRule Rule = rules[0];
            foreach (FileSystemAccessRule rule in rules)
            {
if(rule.IdentityReference.Value.CompareTo("Users")==0)
{ fileAcl.RemoveAccessRule(rule);
} }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM