通过C#继承Active Directory权限

时间:2009-12-11 15:59:09

标签: c# active-directory permissions

修改:它似乎不起作用。似乎没有复制一些权限。 这是在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();
        }

我想知道是否有更好的方法来做这件事,如果我错过了什么。它现在似乎工作得很好,但是一旦项目部署完毕,感觉就像是一个黑客攻击我的屁股。

1 个答案:

答案 0 :(得分:0)

我是个白痴,解决方案只是使用

entry.ObjectSecurity.SetAccessRuleProtection(true, true);

而不是

entry.ObjectSecurity.SetAccessRuleProtection(true, false);

我想我看不懂!