修改:它似乎不起作用。似乎没有复制一些权限。 这是在Exchange 2010的Active Directory中。在屏幕截图中,有“RTCUniversalUserReadOnlyGroup”用户,其中“permission”列为空。这些权限根本不会被复制。有什么提示吗?
我目前必须以编程方式取消选中Active Directory中的“包含此对象的父级的可继承权限”复选框。
编辑:不得不将图片放回网址格式:http://i47.tinypic.com/2a8fed5.jpg
我想到了实际取消选中它的方法,但是当你通过界面执行时,它会询问你是否要复制当前权限或删除它们。
我发现的唯一方法是手动列出权限,将它们放在临时变量中,然后在删除复选框后重新添加它们。
using (DirectoryEntry entry = new DirectoryEntry(myPath))
{
List<ActiveDirectoryAccessRule> rules = new List<ActiveDirectoryAccessRule>();
foreach (object ruleObject in entry.ObjectSecurity.GetAccessRules(false, true, typeof(SecurityIdentifier)))
{
ActiveDirectoryAccessRule rule = ruleObject as ActiveDirectoryAccessRule;
if (rule.IsInherited)
{
rules.Add(rule);
}
}
foreach (object ruleObject in entry.ObjectSecurity.GetAccessRules(false, true, typeof(NTAccount)))
{
ActiveDirectoryAccessRule rule = ruleObject as ActiveDirectoryAccessRule;
if (rule.IsInherited)
{
rules.Add(rule);
}
}
entry.ObjectSecurity.SetAccessRuleProtection(true, false);
foreach (var rule in rules)
{
entry.ObjectSecurity.AddAccessRule(rule);
}
entry.CommitChanges();
}
我想知道是否有更好的方法来做这件事,如果我错过了什么。它现在似乎工作得很好,但是一旦项目部署完毕,感觉就像是一个黑客攻击我的屁股。
答案 0 :(得分:0)
我是个白痴,解决方案只是使用
entry.ObjectSecurity.SetAccessRuleProtection(true, true);
而不是
entry.ObjectSecurity.SetAccessRuleProtection(true, false);
我想我看不懂!