我正在使用 C# 和 .NET 4 编写一个类库,它通过网络与共享服务器上的文件系统进行交互。我正在尝试调整文件夹的某些权限,并且我完全有能力添加 ACE,但我很难删除它们。
这是我到目前为止的代码:
//get ACEs for the working folder.
DirectorySecurity disec = m_diWork.GetAccessControl();
//find out if the account we want to remove is inherited from a parent folder.
bool bIsAccountInherited = disec.GetAccessRules(false, true, typeof(NTAccount)).Cast<AuthorizationRule>().Any(ar => ar.IdentityReference.Value.Equals(act.Value, StringComparison.CurrentCultureIgnoreCase));
if (bIsAccountInherited)
{
//if so, remove inheritance of ACEs but preserve existing ones.
disec.SetAccessRuleProtection(true, true);
}
//remove all access to this account.
disec.PurgeAccessRules(act);
//commit changes to working folder.
m_diWork.SetAccessControl(disec);
变量act
类型为 NTAccount,指域用户。
代码运行没有异常或任何明显问题,并且目标文件夹的权限已正确更改为非继承。但是,根本没有删除任何 ACE。
我尝试了几种不同的方法调用组合,还使用RemoveAccessRuleAll()
,无济于事。我究竟做错了什么?谢谢。
问题在于您试图删除继承的访问权限,这是不允许的。发生这种情况是因为调用不够SetAccessRuleProtection(真,真)。仅当您致电时,更改才会生效设置访问控制然后。换句话说,您无法一次性删除访问权限的继承并对其进行修改。它必须分两个阶段完成,即:
- disec.SetAccessRuleProtection(true, true);
- m_diWork.SetAccessControl(disec);
- disec = m_diWork.GetAccessControl()
- disec.PurgeAccessRules(act);
- m_diWork.SetAccessControl(disec);
这并不明显,也没有帮助清除访问规则不通知删除访问权限的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)