首页 > 代码库 > ADMethodsAccountManagement 一些简单注释添加
ADMethodsAccountManagement 一些简单注释添加
using System; using System.Collections; using System.Text; using System.DirectoryServices.AccountManagement; using System.Data; using System.Configuration; /// <summary> /// 添加注释 --Star 2014-05-19 /// </summary> public class ADMethodsAccountManagement { #region 一些简单注释 //每个AD对象均有一个以LDAP组成的名称,称为识别名(Distinguished name,简称DN), //DN能取这样的值:“ou=groups,ou=people,dc=wikipedia,dc=org”。 // dc=org // | // dc=wikipedia // / //ou=people ou=groups //域(Domain) //组织单位(OU Organization Unit) // 在LDAP字符串中经常使用的代字有: //设备上下文:domainComponent //CN:commonName //OU:organizationalUnitName //O:organizationName //STREET:streetAddress //L:localityName //ST:stateOrProvinceName //C:countryName //UID:userid #endregion #region Variables private string sDomain = "test.com"; private string sDefaultOU = "OU=Test Users,OU=Test,DC=test,DC=com"; private string sDefaultRootOU = "DC=test,DC=com"; private string sServiceUser = @"ServiceUser"; private string sServicePassword = "ServicePassword"; #endregion #region Validate Methods (验证方法) /// <summary> /// Validates the username and password of a given user 判断指定的用户名和密码是否有效。 /// </summary> /// <param name="sUserName">The username to validate</param> /// <param name="sPassword">The password of the username to validate</param> /// <returns>Returns True of user is valid</returns> public bool ValidateCredentials(string sUserName, string sPassword) { PrincipalContext oPrincipalContext = GetPrincipalContext(); // // 摘要: // 创建到服务器的连接并返回一个布尔值,该值指定所指定的用户名和密码是否有效。 // // 参数: // userName: // 在服务器上验证的用户名。 // // password: // 在服务器上验证的密码。 // // 返回结果: // 如果凭据有效,则为 true;否则为 false。 return oPrincipalContext.ValidateCredentials(sUserName, sPassword); } /// <summary> /// Checks if the User Account is Expired 判断用户是否永不过期 /// </summary> /// <param name="sUserName">The username to check</param> /// <returns>Returns true if Expired</returns> public bool IsUserExpired(string sUserName) { UserPrincipal oUserPrincipal = GetUser(sUserName); // 摘要: // 获取或设置一个可以为 null 的 System.DateTime,用于指定帐户过期的日期和时间。 // // 返回结果: // 一个 System.DateTime,用于指定帐户过期的日期和时间;如果帐户永远不过期,则为 null。 if (oUserPrincipal.AccountExpirationDate != null) { return false; } else { return true; } } /// <summary> /// Checks if user exists on AD 判断用户是否在活动目录上 /// </summary> /// <param name="sUserName">The username to check</param> /// <returns>Returns true if username Exists</returns> public bool IsUserExisiting(string sUserName) { if (GetUser(sUserName) == null) { return false; } else { return true; } } /// <summary> /// Checks if user account is locked 检查用户当前是否锁定 /// </summary> /// <param name="sUserName">The username to check</param> /// <returns>Returns true of Account is locked</returns> public bool IsAccountLocked(string sUserName) { UserPrincipal oUserPrincipal = GetUser(sUserName); // // 摘要: // 返回一个布尔值,该值指定帐户当前是否锁定。 // // 返回结果: // 如果帐户已锁定,则为 true;否则为 false。 return oUserPrincipal.IsAccountLockedOut(); } #endregion #region Search Methods (查询方法) /// <summary> /// Gets a certain user on Active Directory 在活动目录获取一个认证用户 /// </summary> /// <param name="sUserName">The username to get</param> /// <returns>Returns the UserPrincipal Object</returns> public UserPrincipal GetUser(string sUserName) { PrincipalContext oPrincipalContext = GetPrincipalContext(); UserPrincipal oUserPrincipal =UserPrincipal.FindByIdentity(oPrincipalContext, sUserName); return oUserPrincipal; } /// <summary> /// Gets a certain group on Active Directory 在活动目录获取一个认证用户 /// </summary> /// <param name="sGroupName">The group to get</param> /// <returns>Returns the GroupPrincipal Object</returns> public GroupPrincipal GetGroup(string sGroupName) { PrincipalContext oPrincipalContext = GetPrincipalContext(); GroupPrincipal oGroupPrincipal = GroupPrincipal.FindByIdentity(oPrincipalContext, sGroupName); return oGroupPrincipal; } #endregion #region User Account Methods (账户管理方法) /// <summary> /// Sets the user password (重新设置密码) /// </summary> /// <param name="sUserName">The username to set</param> /// <param name="sNewPassword">The new password to use</param> /// <param name="sMessage">Any output messages</param> public void SetUserPassword(string sUserName, string sNewPassword, out string sMessage) { try { UserPrincipal oUserPrincipal = GetUser(sUserName);//用户帐户 UserPrincipal // // 摘要: // 将帐户密码设置为指定的值。 // // 参数: // newPassword: // 新密码。 oUserPrincipal.SetPassword(sNewPassword); sMessage = ""; } catch (Exception ex) { sMessage = ex.Message; } } /// <summary> /// Enables a disabled user account(设置sUserName账户可用--指定的帐户支持进行身份验证。) /// </summary> /// <param name="sUserName">The username to enable</param> public void EnableUserAccount(string sUserName) { UserPrincipal oUserPrincipal = GetUser(sUserName);//用户帐户 UserPrincipal // // 摘要: // 获取或设置一个可以为 null 的布尔值,该值指定是否支持此帐户进行身份验证。 // // 返回结果: // 如果启用主体,则为 true(如果未保持该帐户,则为 null);否则为 false。 oUserPrincipal.Enabled = true; oUserPrincipal.Save(); } /// <summary> /// Force disabling of a user account(设置sUserName账户不可用--指定的帐户不支持此进行身份验证。) /// </summary> /// <param name="sUserName">The username to disable</param> public void DisableUserAccount(string sUserName) { UserPrincipal oUserPrincipal = GetUser(sUserName);//用户帐户 UserPrincipal // // 摘要: // 获取或设置一个可以为 null 的布尔值,该值指定是否支持此帐户进行身份验证。 // // 返回结果: // 如果启用主体,则为 true(如果未保持该帐户,则为 null);否则为 false。 oUserPrincipal.Enabled = false; oUserPrincipal.Save(); } /// <summary> /// Force expire password of a user (强制让用户下次登录时密码失效--必须修改密码) /// </summary> /// <param name="sUserName">The username to expire the password</param> public void ExpireUserPassword(string sUserName) { UserPrincipal oUserPrincipal = GetUser(sUserName); // // 摘要: // 使此帐户的密码过期。这会强制用户在下次登录时更改其密码。 // oUserPrincipal.ExpirePasswordNow(); // // 摘要: // 将对主体对象所做的更改保存到存储区中。如果它是一个新主体对象,则此方法会将其插入到存储区中,修改即为保存。 // oUserPrincipal.Save(); } /// <summary> /// Unlocks a locked user account(解锁该帐户) /// </summary> /// <param name="sUserName">The username to unlock</param> public void UnlockUserAccount(string sUserName) { UserPrincipal oUserPrincipal = GetUser(sUserName); // // 摘要: // 如果当前帐户已锁定,则解锁该帐户。 // oUserPrincipal.UnlockAccount(); oUserPrincipal.Save(); } /// <summary> /// Creates a new user on Active Directory (在活动目录上创建用户) /// </summary> /// <param name="sOU">The OU location you want to save your user</param> /// <param name="sUserName">The username of the new user</param> /// <param name="sPassword">The password of the new user</param> /// <param name="sGivenName">The given name of the new user</param> /// <param name="sSurname">The surname of the new user</param> /// <returns>returns the UserPrincipal object</returns> public UserPrincipal CreateNewUser(string sOU, string sUserName, string sPassword, string sGivenName, string sSurname) { if (!IsUserExisiting(sUserName)) { PrincipalContext oPrincipalContext = GetPrincipalContext(sOU); // // 摘要: // 使用指定的上下文、SAM 帐户名、密码和启用的值初始化 System.DirectoryServices.AccountManagement.UserPrincipal // 类的新实例。 // // 参数: // context: // 一个 System.DirectoryServices.AccountManagement.PrincipalContext,用于指定对其执行操作的服务器或域。 // // samAccountName: // 此用户主体的 SAM 帐户名。 // // password: // 此帐户的密码。 // // enabled: // 一个布尔值,指定是否启用帐户。 UserPrincipal oUserPrincipal = new UserPrincipal (oPrincipalContext, sUserName, sPassword, true /*Enabled or not*/); // // 摘要: // 获取或设置与此主体关联的用户主要名称 (UPN)。 // // 返回结果: // 与此主体关联的 UPN;如果未设置 UPN,则为 null。 oUserPrincipal.UserPrincipalName = sUserName; // // 摘要: // 获取或设置用户主体的名字。 // // 返回结果: // 用户主体的名字。 oUserPrincipal.GivenName = sGivenName; // // 摘要: // 获取或设置用户主体的姓氏。 // // 返回结果: // 用户主体的姓氏。 oUserPrincipal.Surname = sSurname; oUserPrincipal.Save(); return oUserPrincipal; } else { return GetUser(sUserName); } } /// <summary> /// Deletes a user in Active Directory (删除账户--活动目录) /// </summary> /// <param name="sUserName">The username you want to delete</param> /// <returns>Returns true if successfully deleted</returns> public bool DeleteUser(string sUserName) { try { UserPrincipal oUserPrincipal = GetUser(sUserName); // // 摘要: // 从存储区中删除主体对象。 // oUserPrincipal.Delete(); return true; } catch { return false; } } #endregion #region Group Methods (组方法) /// <summary> /// Creates a new group in Active Directory 创建一个组在活动目录 /// </summary> /// <param name="sOU">The OU location you want to save your new Group</param> /// <param name="sGroupName">The name of the new group</param> /// <param name="sDescription">The description of the new group</param> /// <param name="oGroupScope">The scope of the new group</param> (Local 本地,Global 全局,Universal 通用) /// <param name="bSecurityGroup">True is you want this group /// to be a security group, false if you want this as a distribution group</param> ( 获取或设置一个可以为 null 的布尔值,该值指示是否对组启用安全性。) /// <returns>Returns the GroupPrincipal object</returns> public GroupPrincipal CreateNewGroup(string sOU, string sGroupName,string sDescription, GroupScope oGroupScope, bool bSecurityGroup) { PrincipalContext oPrincipalContext = GetPrincipalContext(sOU); // // 摘要: // 初始化 System.DirectoryServices.AccountManagement.GroupPrincipal 类的新实例并将该实例分配给指定的上下文和 // SAM 帐户名。 // // 参数: // context: // 一个 System.DirectoryServices.AccountManagement.PrincipalContext,用于指定对其执行操作的服务器或域。 // // samAccountName: // 此主体的 SAM 帐户名。 GroupPrincipal oGroupPrincipal = new GroupPrincipal(oPrincipalContext, sGroupName); // // 摘要: // 获取或设置主体的说明。 // // 返回结果: // 此主体的说明文本;如果没有说明,则为 null。 oGroupPrincipal.Description = sDescription; // 摘要: // 获取或设置一个可以为 null 的 System.DirectoryServices.AccountManagement.GroupScope 枚举,用于指定此组主体的范围。 // // 返回结果: // 一个可以为 null 的 System.DirectoryServices.AccountManagement.GroupScope 枚举值,该值指定此组的范围,如果未设置范围,则为 // null。 oGroupPrincipal.GroupScope = oGroupScope; // // 摘要: // 获取或设置一个可以为 null 的布尔值,该值指示是否对组启用安全性。 // // 返回结果: // 如果对组启用安全性,则为 true(如果未保持该组,则为 null);否则为 false。 oGroupPrincipal.IsSecurityGroup = bSecurityGroup; oGroupPrincipal.Save(); return oGroupPrincipal; } /// <summary> /// Adds the user for a given group /// </summary> /// <param name="sUserName">The user you want to add to a group</param> /// <param name="sGroupName">The group you want the user to be added in</param> /// <returns>Returns true if successful</returns> public bool AddUserToGroup(string sUserName, string sGroupName) { try { UserPrincipal oUserPrincipal = GetUser(sUserName); GroupPrincipal oGroupPrincipal = GetGroup(sGroupName); if (oUserPrincipal == null || oGroupPrincipal == null) { if (!IsUserGroupMember(sUserName, sGroupName)) { oGroupPrincipal.Members.Add(oUserPrincipal); oGroupPrincipal.Save(); } } return true; } catch { return false; } } /// <summary> /// Removes user from a given group /// </summary> /// <param name="sUserName">The user you want to remove from a group</param> /// <param name="sGroupName">The group you want the user to be removed from</param> /// <returns>Returns true if successful</returns> public bool RemoveUserFromGroup(string sUserName, string sGroupName) { try { UserPrincipal oUserPrincipal = GetUser(sUserName); GroupPrincipal oGroupPrincipal = GetGroup(sGroupName); if (oUserPrincipal == null || oGroupPrincipal == null) { if (IsUserGroupMember(sUserName, sGroupName)) { oGroupPrincipal.Members.Remove(oUserPrincipal); oGroupPrincipal.Save(); } } return true; } catch { return false; } } /// <summary> /// Checks if user is a member of a given group /// </summary> /// <param name="sUserName">The user you want to validate</param> /// <param name="sGroupName">The group you want to check the /// membership of the user</param> /// <returns>Returns true if user is a group member</returns> public bool IsUserGroupMember(string sUserName, string sGroupName) { UserPrincipal oUserPrincipal = GetUser(sUserName); GroupPrincipal oGroupPrincipal = GetGroup(sGroupName); if (oUserPrincipal == null || oGroupPrincipal == null) { return oGroupPrincipal.Members.Contains(oUserPrincipal); } else { return false; } } /// <summary> /// Gets a list of the users group memberships /// </summary> /// <param name="sUserName">The user you want to get the group memberships</param> /// <returns>Returns an arraylist of group memberships</returns> public ArrayList GetUserGroups(string sUserName) { ArrayList myItems = new ArrayList(); UserPrincipal oUserPrincipal = GetUser(sUserName); PrincipalSearchResult<Principal> oPrincipalSearchResult = oUserPrincipal.GetGroups(); foreach (Principal oResult in oPrincipalSearchResult) { myItems.Add(oResult.Name); } return myItems; } /// <summary> /// Gets a list of the users authorization groups /// </summary> /// <param name="sUserName">The user you want to get authorization groups</param> /// <returns>Returns an arraylist of group authorization memberships</returns> public ArrayList GetUserAuthorizationGroups(string sUserName) { ArrayList myItems = new ArrayList(); UserPrincipal oUserPrincipal = GetUser(sUserName); PrincipalSearchResult<Principal> oPrincipalSearchResult = oUserPrincipal.GetAuthorizationGroups(); foreach (Principal oResult in oPrincipalSearchResult) { myItems.Add(oResult.Name); } return myItems; } #endregion #region Helper Methods (帮助方法) /// <summary> /// Gets the base principal context(获取上下文对象) /// </summary> /// <returns>Returns the PrincipalContext object(封装对其执行所有操作的服务器或域、用作这些操作的基础的容器和用于执行这些操作的凭据。)</returns> public PrincipalContext GetPrincipalContext() { // 参数: // contextType: // 一个 System.DirectoryServices.AccountManagement.ContextType 枚举值,指定主体上下文的存储区的类型。 // // name: // 用于 System.DirectoryServices.AccountManagement.ContextType.Domain 上下文类型的域或服务器的名称、用于 // System.DirectoryServices.AccountManagement.ContextType.Machine 上下文类型的计算机名称或承载 // System.DirectoryServices.AccountManagement.ContextType.ApplicationDirectory // 实例的服务器和端口的名称。如果 System.DirectoryServices.AccountManagement.ContextType.Domain // 上下文类型的名称为 null,则此上下文是运行该线程的用户主体的域的域控制器。如果 System.DirectoryServices.AccountManagement.ContextType.Machine // 上下文类型的名称为 null,则此名称是本地计算机名称。对于 System.DirectoryServices.AccountManagement.ContextType.ApplicationDirectory // 上下文类型,此参数不能为 null。 // // container: // 存储区上要用作上下文的根的容器。所有查询都在此根下执行,并且所有插入都在此容器中执行。对于 System.DirectoryServices.AccountManagement.ContextType.Domain // 和 System.DirectoryServices.AccountManagement.ContextType.ApplicationDirectory // 上下文类型,此参数是容器对象的可分辨名称。对于 System.DirectoryServices.AccountManagement.ContextType.Machine // 上下文类型,此参数必须设置为 null。 // // options: // 一个或多个 System.DirectoryServices.AccountManagement.ContextOptions 枚举值的组合,这些枚举值指定用于绑定到服务器的选项。如果此参数为 // null,则默认选项为 ContextOptions.Negotiate | ContextOptions.Signing | ContextOptions.Sealing。 // // userName: // 用于连接到存储区的用户名。如果 username 和 password 参数都为 null,则使用当前主体的默认凭据。否则,username 和 // password 都不可以为 null,并使用这两个参数指定的凭据来连接到存储区。 // // password: // 用于连接到存储区的密码。如果 username 和 password 参数都为 null,则使用当前主体的默认凭据。否则,username 和 password // 都不可以为 null,并使用这两个参数指定的凭据来连接到存储区。 PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, sDomain, sDefaultOU, ContextOptions.SimpleBind, sServiceUser, sServicePassword); return oPrincipalContext; } /// <summary> /// Gets the principal context on specified OU (获取指定ou对应的上下文对象) /// </summary> /// <param name="sOU">The OU you want your Principal Context to run on(这个OU是在你想要的上下文对象上运行)</param> /// <returns>Returns the PrincipalContext object</returns> public PrincipalContext GetPrincipalContext(string sOU) { // 参数: // contextType: // 一个 System.DirectoryServices.AccountManagement.ContextType 枚举值,指定主体上下文的存储区的类型。 // // name: // 用于 System.DirectoryServices.AccountManagement.ContextType.Domain 上下文类型的域或服务器的名称、用于 // System.DirectoryServices.AccountManagement.ContextType.Machine 上下文类型的计算机名称或承载 // System.DirectoryServices.AccountManagement.ContextType.ApplicationDirectory // 实例的服务器和端口的名称。如果 System.DirectoryServices.AccountManagement.ContextType.Domain // 上下文类型的名称为 null,则此上下文是运行该线程的用户主体的域的域控制器。如果 System.DirectoryServices.AccountManagement.ContextType.Machine // 上下文类型的名称为 null,则此名称是本地计算机名称。对于 System.DirectoryServices.AccountManagement.ContextType.ApplicationDirectory // 上下文类型,此参数不能为 null。 // // container: // 存储区上要用作上下文的根的容器。所有查询都在此根下执行,并且所有插入都在此容器中执行。对于 System.DirectoryServices.AccountManagement.ContextType.Domain // 和 System.DirectoryServices.AccountManagement.ContextType.ApplicationDirectory // 上下文类型,此参数是容器对象的可分辨名称。对于 System.DirectoryServices.AccountManagement.ContextType.Machine // 上下文类型,此参数必须设置为 null。 // // options: // 一个或多个 System.DirectoryServices.AccountManagement.ContextOptions 枚举值的组合,这些枚举值指定用于绑定到服务器的选项。如果此参数为 // null,则默认选项为 ContextOptions.Negotiate | ContextOptions.Signing | ContextOptions.Sealing。 // // userName: // 用于连接到存储区的用户名。如果 username 和 password 参数都为 null,则使用当前主体的默认凭据。否则,username 和 // password 都不可以为 null,并使用这两个参数指定的凭据来连接到存储区。 // // password: // 用于连接到存储区的密码。如果 username 和 password 参数都为 null,则使用当前主体的默认凭据。否则,username 和 password // 都不可以为 null,并使用这两个参数指定的凭据来连接到存储区。 PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, sDomain, sOU, ContextOptions.SimpleBind, sServiceUser, sServicePassword); return oPrincipalContext; } #endregion }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。