C# 通过C继承Active Directory权限#
编辑:它似乎不起作用。有些权限似乎没有被复制。 它位于Exchange 2010的Active Directory中。在屏幕截图中,有一个用户“RTCUniversalUserReadOnlyGroup”,其“权限”列为空。这些权限根本不会被复制。有什么建议吗 我目前必须以编程方式取消选中Active Directory中的“包含此对象父对象的可继承权限”复选框 编辑:必须以URL格式将图像放回: 我想出了取消选中它的方法,但是当你通过界面执行时,它会询问你是想复制当前权限还是删除它们 我找到的唯一方法是手动列出权限,将它们放入临时变量中,然后在删除复选框后重新添加它们C# 通过C继承Active Directory权限#,c#,active-directory,permissions,C#,Active Directory,Permissions,编辑:它似乎不起作用。有些权限似乎没有被复制。 它位于Exchange 2010的Active Directory中。在屏幕截图中,有一个用户“RTCUniversalUserReadOnlyGroup”,其“权限”列为空。这些权限根本不会被复制。有什么建议吗 我目前必须以编程方式取消选中Active Directory中的“包含此对象父对象的可继承权限”复选框 编辑:必须以URL格式将图像放回: 我想出了取消选中它的方法,但是当你通过界面执行时,它会询问你是想复制当前权限还是删除它们 我找到的
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();
}
使用(DirectoryEntry=newdirectoryEntry(myPath))
{
列表规则=新列表();
foreach(entry.ObjectSecurity.GetAccessRules中的对象ruleObject(false、true、typeof(SecurityIdentifier)))
{
ActiveDirectoryAccessRule=ruleObject作为ActiveDirectoryAccessRule;
如果(规则ISInhered)
{
规则。添加(规则);
}
}
foreach(entry.ObjectSecurity.GetAccessRules中的对象ruleObject(false、true、typeof(NTAccount)))
{
ActiveDirectoryAccessRule=ruleObject作为ActiveDirectoryAccessRule;
如果(规则ISInhered)
{
规则。添加(规则);
}
}
entry.ObjectSecurity.SetAccessRuleProtection(true,false);
foreach(规则中的var规则)
{
entry.ObjectSecurity.AddAccessRule(规则);
}
entry.CommitChanges();
}
我想知道是否有更好的方法来做到这一点,如果我错过了什么。现在看来它还不错,但一旦项目部署,感觉就像一个黑客会咬我的屁股。我是个白痴,解决方案就是简单地使用
entry.ObjectSecurity.SetAccessRuleProtection(true, true);
而不是
entry.ObjectSecurity.SetAccessRuleProtection(true, false);
我想我不会读书 编辑您的问题以显示图像:)