標籤:user style 修改 建立 color foreach 將不 author 檔案
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 而不是帳戶的使用者或組名。
如果建立帳戶,再刪除帳戶,然後使用相同的使用者名稱建立另一個帳戶,則新帳戶將不具有授權給前一個帳戶的權力或許可權,
原因是該帳戶具有不同的 S識別碼。安全性識別碼也被稱為安全性識別碼 或 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);
} }
C#檔案夾許可權操作整理