public static FromDirectoryEntry ( System.DirectoryServices.DirectoryEntry directoryEntry, ICollection |
||
directoryEntry | System.DirectoryServices.DirectoryEntry | |
additionalPropertyNames | ICollection |
|
return |
private T MapToPrincipal <T>(SearchResult searchResult) where T : Principal { using (DirectoryEntry directoryEntry = searchResult.GetDirectoryEntry()) { return(Principal.FromDirectoryEntry <T>(domainPath, directoryEntry, additionalPropertyNames)); } }
protected virtual T GetPrincipalInternal <T>(Guid nativeGuid, ICollection <string> additionalPropertyNames = null) where T : Principal { using (DirectoryEntry domainEntry = GetDirectoryEntryByNativeGuid(nativeGuid)) { DomainPath domainPath = ResolveDomainPath(domainEntry); return(Principal.FromDirectoryEntry <T>(domainPath, domainEntry, additionalPropertyNames)); } }
public virtual IReadOnlyCollection <IPrincipal> GetGroupsWhereUserIsMember(Guid userNativeGuid) { using (DirectoryEntry domainEntry = GetDirectoryEntryByNativeGuid(userNativeGuid)) { SecurityIdentifier sid = GetObjectSid(domainEntry); DomainPath domainPath = ResolveDomainPath(domainEntry); UserPrincipal principal = Principal.FromDirectoryEntry <UserPrincipal>(domainPath, domainEntry); IReadOnlyCollection <IPrincipal> parentGroups = GetGroupsWhereUserIsMemberInternal(principal); IReadOnlyCollection <IPrincipal> foreignGroups = GetGroupsWhereUserIsMemberInternal(sid); return(parentGroups.Concat(foreignGroups.Where(o => parentGroups.All(p => p.NativeGuid != o.NativeGuid))).ToList()); } }
protected virtual IPrincipal GetPrincipalInternal(SecurityIdentifier sid, ICollection <string> additionalPropertyNames = null) { foreach (DomainPath domainPath in domainPaths) { using (DirectoryEntry entry = SearchMember(domainPath.GetPathWithProtocol(), sid)) { if (entry != null) { return(Principal.FromDirectoryEntry(domainPath, entry, additionalPropertyNames)); } } } return(null); }
protected virtual List <IPrincipal> GetParentDomainPaths(string path, string distinguishedName) { List <IPrincipal> principals = new List <IPrincipal>(); string fullDomainPath = path + "/" + distinguishedName; using (DirectoryEntry entry = new DirectoryEntry(fullDomainPath)) { DomainPath domainPath = ResolveDomainPath(path); GroupPrincipal principal = Principal.FromDirectoryEntry(domainPath, entry) as GroupPrincipal; if (principal != null) { principals.Add(principal); foreach (string memberOf in entry.Properties[ActiveDirectoryProperties.MemberOf]) { List <IPrincipal> groups = GetParentDomainPaths(path, memberOf); principals.AddRange(groups.Where(o => principals.All(p => p.NativeGuid != o.NativeGuid))); } } } return(principals); }
protected virtual IReadOnlyCollection <IPrincipal> GetGroupsWhereUserIsMemberInternal(UserPrincipal principal) { var groups = new List <IPrincipal>(); DomainPath domainPath = ResolveDomainPath(principal.DomainPath); foreach (string parentDomainPath in principal.ParentDomainPaths) { string path = string.Format("{0}/{1}", domainPath.GetPathWithProtocol(), parentDomainPath); using (var entry = new DirectoryEntry(path)) { groups.Add(Principal.FromDirectoryEntry(domainPath, entry)); } } if (!groups.Select(p => p.AccountName).Any(accountName => accountName.ToLower().Contains("domain users"))) { string domain = domains[domainPath]; groups.Add(GetPrincipalInternal <GroupPrincipal>(string.Format("{0}\\Domain users", domain))); } return(groups); }