2009-12-11 125 views
1

編輯:看來它不起作用。似乎沒有複製一些權限。 這是在Exchange 2010的Active Directory中。在屏幕截圖中,有「RTCUniversalUserReadOnlyGroup」用戶,「權限」列爲空。這些權限根本不會被複制。有小費嗎?通過C#繼承Active Directory權限

我目前不得不以編程方式取消選中「在此目標的父項中包含可繼承權限」複選框。

編輯:不得不把圖像回URL形式: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

編輯你的問題顯示圖像:) – Shoban

回答

0

我是個白癡,該解決方案是簡單地使用

entry.ObjectSecurity.SetAccessRuleProtection(true, true); 

代替

entry.ObjectSecurity.SetAccessRuleProtection(true, false); 

我想我可以不讀!