Actuellement, je voudrais trouver tous les groupes dans l'Active Directory où l'utilisateur actuel a le droit WriteProperty. Le problème est que je peux trouver tous les groupes où l'utilisateur est directement inséré, mais quand l'utilisateur est dans un groupe et que ce groupe a un accès en écriture, il n'apparaîtra pas. Je pensais que la définition des booléens de GetAccessRules() aiderait ici, mais ce n'est pas le cas.Comment trouver tous les groupes dans ActiveDirectory où l'utilisateur actuel a l'accès WriteProperty?
Voici le code que je l'ai déjà:
var identity = WindowsIdentity.GetCurrent().User;
var allDomains = Forest.GetCurrentForest().Domains.Cast<Domain>();
var allSearcher = allDomains.Select(domain =>
{
var searcher = new DirectorySearcher(new DirectoryEntry("LDAP://" + domain.Name));
//Apply some filter to focus on only some specfic objects
searcher.Filter = "(&(objectClass=group)(name=*part_of_group_name*))";
return searcher;
});
var itemsFound = allSearcher
.SelectMany(searcher => searcher.FindAll()
.Cast<SearchResult>()
.Select(result => result.GetDirectoryEntry()));
var itemsWithWriteAccess = itemsFound
.Where(entry => entry.ObjectSecurity.GetAccessRules(true, true, typeof(SecurityIdentifier))
.Cast<ActiveDirectoryAccessRule>()
.Where(rule => rule.IdentityReference == identity)
.Where(rule => (rule.ActiveDirectoryRights & ActiveDirectoryRights.WriteProperty) == ActiveDirectoryRights.WriteProperty)
.Count() > 0);
foreach (var item in itemsWithWriteAccess)
{
Debug.Print(item.Name);
}