无法使用DirectorySecurity工具删除文件夹权限(访问规则)

时间:2014-01-24 14:16:50

标签: c# security file-permissions

我知道有很多关于删除文件夹权限的帖子。

但是,我尝试的每一个似乎都保持用户组完好无损并且不会抛出异常 - 规则从ACL中删除,修改后的AccessControl设置成功,但没有进行实际更改。

我需要直接清除文件夹的权限列表。我希望文件夹在之后为空。

示例:

此:

properties

应该成为:

Cleared Properties

这是我目前正在尝试的但没有成功:

DirectorySecurity objSecObj = directory.GetAccessControl();
                AuthorizationRuleCollection acl = objSecObj.GetAccessRules(true, true,
                                            typeof(System.Security.Principal.NTAccount));
objSecObj.SetAccessRuleProtection(false,false);
// EDIT: The above line was the problem, first param should be true.


foreach (FileSystemAccessRule ace in acl)
{
      objSecObj.RemoveAccessRuleSpecific(ace);
}
directory.SetAccessControl(objSecObj);

目的是删除所有用户,然后在事后手动添加特定用户组。这部分不是问题,删除当前用户是我遇到麻烦的地方。

1 个答案:

答案 0 :(得分:2)

DirectorySecurity objSecObj = directory.GetAccessControl();
AuthorizationRuleCollection acl = objSecObj.GetAccessRules(true, true,
                                            typeof(System.Security.Principal.NTAccount));
objSecObj.SetAccessRuleProtection(true, false); //to remove inherited permissions
foreach (FileSystemAccessRule ace in acl) //to remove any other permission
{    
    objSecObj.PurgeAccessRules(ace.IdentityReference);  //same as use objSecObj.RemoveAccessRuleSpecific(ace);
}

directory.SetAccessControl(objSecObj);