FromDirectoryEntry() public static method

public static FromDirectoryEntry ( System.DirectoryServices.DirectoryEntry directoryEntry, ICollection additionalPropertyNames = null ) : Principal
directoryEntry System.DirectoryServices.DirectoryEntry
additionalPropertyNames ICollection
return Principal
コード例 #1
0
 private T MapToPrincipal <T>(SearchResult searchResult) where T : Principal
 {
     using (DirectoryEntry directoryEntry = searchResult.GetDirectoryEntry())
     {
         return(Principal.FromDirectoryEntry <T>(domainPath, directoryEntry, additionalPropertyNames));
     }
 }
コード例 #2
0
 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));
     }
 }
コード例 #3
0
        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());
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }