C# 通过C继承Active Directory权限#

C# 通过C继承Active Directory权限#,c#,active-directory,permissions,C#,Active Directory,Permissions,编辑:它似乎不起作用。有些权限似乎没有被复制。 它位于Exchange 2010的Active Directory中。在屏幕截图中,有一个用户“RTCUniversalUserReadOnlyGroup”,其“权限”列为空。这些权限根本不会被复制。有什么建议吗 我目前必须以编程方式取消选中Active Directory中的“包含此对象父对象的可继承权限”复选框 编辑:必须以URL格式将图像放回: 我想出了取消选中它的方法,但是当你通过界面执行时,它会询问你是想复制当前权限还是删除它们 我找到的

编辑:它似乎不起作用。有些权限似乎没有被复制。 它位于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);

我想我不会读书

编辑您的问题以显示图像:)