ASP.NET访问域用户(AD活动目录)信息的类

public static class DomainInformation
    {
               
        #region Constants
        //static string[] usersLdapPath = @"LDAP://zzzzzz.com/OU=xxxxxx,DC=yyyyyy,DC=com";
        static string usersLdapPath = System.Configuration.ConfigurationManager.AppSettings["LDAPConnectionString"].ToString() ;
        const string adLoginName = "administrator"; //管理员用户
        const string adLoginPassword = "88888888";
        #endregion
       
        static public string[] GetGroupsForUser(string domainADsPath, string username)// 获取用户所属组
        {

            DirectoryEntry usersDE = Directoryunits(domainADsPath);
            DirectorySearcher ds = new DirectorySearcher(usersDE);
            ds.Filter = "(&(sAMAccountName=" + username + "))";
            ds.PropertiesToLoad.Add("memberof");
            SearchResult r = ds.FindOne();

            if (r.Properties["memberof"].Count == 0)
            {
                return (null);
            }

            string[] results = new string[r.Properties["memberof"].Count];
            for (int i = 0; i < r.Properties["memberof"].Count; i++)
            {
                string theGroupPath = r.Properties["memberof"][i].ToString();
                results[i] = theGroupPath.Substring(3, theGroupPath.IndexOf(",") - 3);
            }
            usersDE.Close();
            return (results);
        }
        /// <summary>
        /// </summary>
        /// <param name="username"></param>
        /// <returns></returns>
        public static string[] GetGroupsForUser(string username)
        {
            DirectoryEntry usersDE = DomainInformation.Directory();
            DirectorySearcher ds = new DirectorySearcher(usersDE);
            ds.Filter = "(&(sAMAccountName=" + username + "))";
            ds.PropertiesToLoad.Add("memberof");
            SearchResult r = ds.FindOne();
            if (r.Properties["memberof"] == null)
            {
                return (null);
            }
            string[] results = new string[r.Properties["memberof"].Count+1];
            for (int i = 0; i < r.Properties["memberof"].Count; i++)
            {
                string theGroupPath = r.Properties["memberof"][i].ToString();
                results[i] = theGroupPath.Substring(3, theGroupPath.IndexOf(",") - 3);
            }
            results[r.Properties["memberof"].Count]="All";//All组属于任何人,在AD之外定义了一个组,以便分配用户权限
            usersDE.Close();
            return (results);
        }
        static public string[] GetUsersForGroup(string domainADsPath, string Groupname)// 获取用户
        {

            DirectoryEntry usersDE = Directoryunits(domainADsPath);
            DirectorySearcher ds = new DirectorySearcher(usersDE);
            ds.Filter = "(&(objectClass=group)(cn=" + Groupname + "))";
            ds.PropertiesToLoad.Add("member");
            SearchResult r = ds.FindOne();

            if (r.Properties["member"] == null)
            {
                return (null);
            }

            string[] results = new string[r.Properties["member"].Count];
            for (int i = 0; i < r.Properties["member"].Count; i++)
            {
                string theGroupPath = r.Properties["member"][i].ToString();
                results[i] = theGroupPath.Substring(3, theGroupPath.IndexOf(",") - 3);
            }
            usersDE.Close();
            return (results);
        }


        static public string GetUserDisplayName(string username)// 获取组用户
        {
            string results;
            DirectoryEntry usersDE = Directory();
           
            DirectorySearcher ds = new DirectorySearcher(usersDE);
            ds.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))";
            ds.PropertiesToLoad.Add(UserProperty.DisplayName);
            SearchResult r = ds.FindOne();
            results = r.GetDirectoryEntry().InvokeGet(UserProperty.DisplayName).ToString();
            usersDE.Close();
            return (results);
          
        }

        static public UserInfoEx GetUserInfoEx(string username)      //获取域用户详细信息
        {
            DirectoryEntry usersDE =Directory();
            DirectorySearcher ds = new DirectorySearcher(usersDE);
            ds.Filter = "(&(objectClass=user)(objectCatogery=person)(sAMAccountName=" + username + "))";
            ds.PropertiesToLoad.Add("cn");
            ds.PropertiesToLoad.Add(UserProperty.Name);
            ds.PropertiesToLoad.Add(UserProperty.UserName);
            ds.PropertiesToLoad.Add(UserProperty.homePhone);
            ds.PropertiesToLoad.Add(UserProperty.FirstName);
            ds.PropertiesToLoad.Add(UserProperty.LastName);
            ds.PropertiesToLoad.Add(UserProperty.Email);
            ds.PropertiesToLoad.Add(UserProperty.Title);
            ds.PropertiesToLoad.Add(UserProperty.Company);
            ds.PropertiesToLoad.Add(UserProperty.Address);
            ds.PropertiesToLoad.Add(UserProperty.City);
            ds.PropertiesToLoad.Add(UserProperty.State);
            ds.PropertiesToLoad.Add(UserProperty.PostalCode);
            ds.PropertiesToLoad.Add(UserProperty.Phone);
            ds.PropertiesToLoad.Add(UserProperty.Country);
            SearchResult r = ds.FindOne();

            UserInfoEx result = new UserInfoEx();
         
            result.Name = r.GetDirectoryEntry().InvokeGet(UserProperty.Name).ToString();
            result.LoginName = r.GetDirectoryEntry().InvokeGet(UserProperty.UserName).ToString();
            if (r.GetDirectoryEntry().InvokeGet(UserProperty.FirstName) != null)
            {
                result.FirstName = r.GetDirectoryEntry().InvokeGet(UserProperty.FirstName).ToString();
            }
            else
            {
                result.FirstName = "";
            }
            if (r.GetDirectoryEntry().InvokeGet(UserProperty.homePhone) != null)
            {
                result.homePhone = r.GetDirectoryEntry().InvokeGet(UserProperty.homePhone).ToString();
            }
            else
            {
                result.homePhone = "";
            }
            if (r.GetDirectoryEntry().InvokeGet(UserProperty.LastName)!= null)
            {
                result.LastName = r.GetDirectoryEntry().InvokeGet(UserProperty.LastName).ToString();
            }
            else
            {
                result.LastName = "";
            }
            if (r.GetDirectoryEntry().InvokeGet(UserProperty.Email) != null)
            {
                result.EmailAddress = r.GetDirectoryEntry().InvokeGet(UserProperty.Email).ToString();
            }
            else
            {
                result.EmailAddress = "";
            }
            if (r.GetDirectoryEntry().InvokeGet(UserProperty.Title) != null)
            {
                result.Title = r.GetDirectoryEntry().InvokeGet(UserProperty.Title).ToString();
            }
            else
            {
                result.Title = "";
            }
            if (r.GetDirectoryEntry().InvokeGet(UserProperty.Company) != null)
            {
                result.Company =r.GetDirectoryEntry().InvokeGet(UserProperty.Company).ToString();
            }
            else
            {
                result.Company = "";
            }
            if (r.GetDirectoryEntry().InvokeGet(UserProperty.Address) != null)
            {
                result.Address =r.GetDirectoryEntry().InvokeGet(UserProperty.Address).ToString();
            }
            else
            {
                result.Address = "";
            }
            if (r.GetDirectoryEntry().InvokeGet(UserProperty.City) != null)
            {
                result.City =r.GetDirectoryEntry().InvokeGet(UserProperty.City).ToString();
            }
            else
            {
                result.City = "";
            }
            if (r.GetDirectoryEntry().InvokeGet(UserProperty.State) != null)
            {
                result.State =r.GetDirectoryEntry().InvokeGet(UserProperty.State).ToString();
            }
            else
            {
                result.State = "";
            }
            if (r.GetDirectoryEntry().InvokeGet(UserProperty.PostalCode) != null)
            {
                result.PostalCode =r.GetDirectoryEntry().InvokeGet(UserProperty.PostalCode).ToString();
            }
            else
            {
                result.PostalCode = "";
            }
            if (r.GetDirectoryEntry().InvokeGet(UserProperty.Phone) != null)
            {
                result.Phone = r.GetDirectoryEntry().InvokeGet(UserProperty.Phone).ToString();
            }
            else
            {
                result.Phone = "";
            }
            if (r.GetDirectoryEntry().InvokeGet(UserProperty.Country) != null)
            {
                result.Country =r.GetDirectoryEntry().InvokeGet(UserProperty.Country).ToString();
            }
            else
            {
                result.Country = "";
            }
            usersDE.Close();
            return (result);
        }

        static private string GetAdGroupDescription(string prefix)//根据CN获取组description
        {
            string results;

            DirectoryEntry groupsDE = Directory();
            DirectorySearcher groupsDS = new DirectorySearcher(groupsDE);
            groupsDS.Filter = "(&(objectClass=group)(CN=" + prefix + "*))";
            groupsDS.PropertiesToLoad.Add("cn");
            SearchResult sr = groupsDS.FindOne();
            results = sr.GetDirectoryEntry().InvokeGet("description").ToString();
            groupsDE.Close();
            return (results);
        }
        static private DataTable GetAdGroupInfo()//根据CN获取组信息
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("URL", typeof(System.String));
            dt.Columns.Add("cn", typeof(System.String));
            dt.Columns.Add("Description", typeof(System.String));

            DirectoryEntry groupsDE = Directory();
            DirectorySearcher searcher = new DirectorySearcher(groupsDE);
          
            searcher.Filter = "(&(objectClass=group))";
            //searcher.SearchScope = SearchScope.Subtree;
            //searcher.Sort = new SortOption("description", System.DirectoryServices.SortDirection.Ascending);
            searcher.PropertiesToLoad.AddRange(new string[] { "cn", "description"});
            SearchResultCollection results = searcher.FindAll();
            if (results.Count == 0)
            {
                return (null);

            }
            else {
                foreach (SearchResult result in results)
                {
                    DataRow dr = dt.NewRow();
                    dr[0] = result.Path.ToString();
                    dr[1] = result.GetDirectoryEntry().InvokeGet("cn").ToString();
                    if (result.GetDirectoryEntry().InvokeGet("Description")!=null)
                    dr[2] = result.GetDirectoryEntry().InvokeGet("Description").ToString();
                    else
                    dr[2] = result.GetDirectoryEntry().InvokeGet("cn").ToString();
                    dt.Rows.Add(dr);
                }
                dt.DefaultView.Sort = "description ASC";
                groupsDE.Close();
                return dt;
           
            }

        }

        static public string getAccountName(string cn) //根据CN获取登陆名
        {
            foreach (string path in usersLdapPath)
            {
                DirectoryEntry userContainerDE = Directoryunits(path);
                DirectorySearcher ds = new DirectorySearcher(userContainerDE);
                ds.Filter = "(&(objectClass=user)(cn=*" + cn + "*))";
                ds.PropertiesToLoad.Add("sAMAccountName");
                SearchResult r = ds.FindOne();
                if (r!=null)
                return r.GetDirectoryEntry().InvokeGet("sAMAccountName").ToString();
            }
            return null;
        }

        static public bool isAdUser(string username)//判断是否域用户
        {

            DirectoryEntry userContainerDE = Directory();
            DirectorySearcher ds = new DirectorySearcher(userContainerDE);
            ds.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))";
            ds.PropertiesToLoad.Add("cn");
            SearchResult r = ds.FindOne();
            if (r == null)
            {
                userContainerDE.Close();
                return false;
               
            }
            else
            {
                userContainerDE.Close();
                return true;
            }
          
        }

posted @ 2011-05-25 01:00  焚情、烈日  阅读(680)  评论(0编辑  收藏  举报