⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adservices.cs

📁 C#自定义查询控件
💻 CS
📖 第 1 页 / 共 4 页
字号:
using System;
using System.DirectoryServices;
using System.ComponentModel;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Collections;
using System.Collections.Specialized;


namespace CommonComponent.AdServices
{
	/// <summary>
	/// 
	/// </summary>
	public class ADServices:ILogonNTUser,IQueryList,IGroup,IUser
	{
		DirectoryEntry myEntry;
		DirectoryEntries myEntries;
		DirectorySearcher mySearcher;
		DataTable myTable;
		DataView myView;
		DataRow myRow;
		StringCollection strCollection;
		StringBuilder strBuilder;
		string strFilter,strErrDescription,CompanyFilter,strPropertiesToLoad;
		
		//缺损值
		const string CONST_DOMAIN = "GFG1";
		const string CONST_ADSPATH = "LDAP://gfg1.esquel.com/OU=Organization,DC=gfg1,DC=esquel,DC=com";
		const string CONST_STRDESCRIPTION	="";
		const bool CONST_ISOVERWRITE		=false;
		//返回一个异常属性[只读]
		public string ExceptionDesc
		{
			get{return strErrDescription;}
		}
		#region[NT验证]
		/// <summary>
		/// NT验证
		/// </summary>
		/// <param name="UserName">用户名</param>
		/// <param name="Password">密码</param>
		/// <param name="Domain">域名</param>
		/// <returns>true|false "true"验证成功,"false"验证失败</returns>
		[
		Description("NT验证"),	//描述
		DefaultValue(false),	//初始值
		Browsable(true),		//设置属性或者事件是否在Vs.Net的属性窗口中出现。
		Localizable(true)		//设置属性是否被本地化
		]
		bool ILogonNTUser.LogonNTUser(string UserName,string Password,string Domain)
		{
			string strPath = string.Format("LDAP://{0}.esquel.com",Domain);
			//验证用户
			myEntry = new DirectoryEntry(strPath, Domain+@"\"+UserName,Password);
			try 
			{
				int itmp = myEntry.Properties.Count;
				return true;
			}
			catch(Exception err)
			{
				strErrDescription = err.ToString();
				return false;
			}
			finally
			{
				strPath = null;
				myEntry.Dispose();
				myEntry.Close();
			}
		}

		/// <summary>
		/// NT验证[缺损为GFG1域],如果要改变域名[用户名 Domain\UserName]
		/// </summary>
		/// <param name="UserName">用户名 [格式:①UserName(例如:admin 默认为GFG1域) ②Domain\UserName(例如:GFG1\admin)]③Domain/UserName(例如:GFG1/admin) </param>
		/// <param name="Password">密码</param>
		/// <returns>true|false "true"验证成功,"false"验证失败</returns>
		bool ILogonNTUser.LogonNTUser(string UserName,string Password)
		{
			string _Domain;		//域名
			string _UserName;	//用户名
			int	   _Place = 0;		//记录"\"的位置

			ILogonNTUser INTUser = new ADServices();
			try
			{
				if(UserName.IndexOf(@"\") > 0)
					_Place  = UserName.IndexOf(@"\");
				else if (UserName.IndexOf("/") > 0)
					_Place  = UserName.IndexOf("/");
				
				if (_Place > 0)
				{
					//采用“域名\用户名”格式 或“域名/用户名”
					_Domain	  = UserName.Substring(0,_Place);
					_UserName = UserName.Substring(_Place+1,UserName.Length-_Place-1);
				}
				else
				{
					//取默认域名
					_Domain = CONST_DOMAIN;
					_UserName = UserName;
				}
				//调用方法验证
				return INTUser.LogonNTUser(_UserName,Password,_Domain);
			}
			catch(Exception err)
			{
				strErrDescription = err.ToString();
				return false;
			}
			finally
			{
				_Domain = null;
				_UserName = null;
				_Place = 0;
			}
		}
		#endregion
		#region[公司清单]
		/// <summary>
		/// 得到公司的清单
		/// </summary>
		/// <returns>DataView,字段有name[公司名],ADSPath[LDAP://地址]</returns>
		DataView IQueryList.GetCompanyList()
		{
			CompanyFilter = "'GFG','MIS','Kindergarten','TimePC','Disable account','Disable Computer','ETF'";
			strFilter =  "(objectCategory=CN=Organizational-Unit,CN=Schema,CN=Configuration,DC=esquel,DC=com)";
			strPropertiesToLoad = "Name,AdsPath";
			try
			{
				//***********执行方法************
				//得到查询结果,并赋给mySearcher
				GetOUList(CONST_ADSPATH,strFilter,strPropertiesToLoad,SearchScope.OneLevel);	
				//通过mySearcher的值创建一张表
				NewTable(mySearcher);		
				//*******************************
				myView = myTable.DefaultView;
				myView.RowFilter = "not name in ("+CompanyFilter+")";
				myView.Sort="name";

				myEntry.Close();
				mySearcher.Dispose();
				mySearcher.Dispose();				
			}
			catch(Exception err)
			{
				strErrDescription = err.ToString();
			}
			return myView;
			
			
		}
		/// <summary>
		/// 得到公司清单
		/// </summary>
		/// <returns>返回一个数组</returns>
		StringCollection IQueryList.GetCompanyArr()
		{
			CompanyFilter = "GFG,MIS,Kindergarten,TimePC,Disable account,Disable Computer,ETF";
			strFilter =  "(objectCategory=CN=Organizational-Unit,CN=Schema,CN=Configuration,DC=esquel,DC=com)";
			strPropertiesToLoad = "Name";

			strCollection = new StringCollection();
			try
			{
				//***********执行方法************
				//得到查询结果,并赋给mySearcher
				GetOUList(CONST_ADSPATH,strFilter,strPropertiesToLoad,SearchScope.OneLevel);
				//*******************************
				//无效的公司字符串转成数组
				char[] delimiter = ",".ToCharArray();
				string[] arrCompanyFilter = CompanyFilter.Split(delimiter);
				//判断是否被包含
				bool isContain = false;
				
				foreach(SearchResult res in mySearcher.FindAll())
				{
					//过滤无效的公司清单
					foreach(string strCompanyFilter in arrCompanyFilter)
					{
						if (strCompanyFilter == res.Properties["name"][0].ToString())
							isContain = true;
					}
					if (!isContain)
						strCollection.Add(res.Properties["name"][0].ToString());
					isContain = false;
				}
			}
			catch(Exception err)
			{
				strErrDescription = err.ToString();
			}
			return strCollection;
		}

		#endregion
		#region[帐号清单]
		/// <summary>
		/// 根据用户的条件来选择用户
		/// </summary>
		/// <param name="ADSPath">LDAP://地址</param>
		/// <returns>DataView</returns>
		DataView IQueryList.GetAccountsList(string ADSPath)
		{
			strFilter = "(objectClass=user)";
			strPropertiesToLoad = "sAMAccountName,employeeID,sn,givenName,AdsPath";
			try
			{	
				//***********执行方法************
				//得到查询结果,并赋给mySearcher
				GetOUList(ADSPath,strFilter,strPropertiesToLoad,SearchScope.Subtree);	
				//通过mySearcher的值创建一张表
				NewTable(mySearcher);		
				//*******************************
				myView = myTable.DefaultView;
				myView.RowFilter = "not sAMAccountName like '%$' ";
				myEntry.Close();
				mySearcher.Dispose();
			}
			catch(Exception err)
			{
				strErrDescription = err.ToString();
			}
			return myView;	

		}
		/// <summary>
		/// 返回帐号清单
		/// </summary>
		/// <param name="ADSPath">LDAP://地址</param>
		/// <returns>StringCollection</returns>
		StringCollection IQueryList.GetAccountsArr(string ADSPath)
		{
			strCollection = new StringCollection();
			strFilter = "(objectClass=user)";
			strPropertiesToLoad = "sAMAccountName";
			try
			{	
				//***********执行方法************
				//得到查询结果,并赋给mySearcher
				GetOUList(ADSPath,strFilter,strPropertiesToLoad,SearchScope.Subtree);	
				//*******************************
				foreach(SearchResult res in mySearcher.FindAll())
				{
					//过滤无效的帐号
					string strNTAccounts = res.Properties[strPropertiesToLoad][0].ToString();
					if(strNTAccounts.IndexOf("$")<=0)
						strCollection.Add(strNTAccounts);
				}
				myEntry.Close();
				myEntry.Dispose();
				mySearcher.Dispose();

			}
			catch(Exception err)
			{
				strErrDescription = err.ToString();
			}
			return strCollection;
			
		}
		/// <summary>
		/// 返回所有的NT帐号
		/// </summary>
		/// <returns>DataView</returns>
		DataView IQueryList.GetAccountsList()
		{
			IQueryList objGetAccountsList = (IQueryList)new ADServices();
			return objGetAccountsList.GetAccountsList(CONST_ADSPATH);
		}
		/// <summary>
		/// 返回帐号的清单
		/// </summary>
		/// <returns>StringCollection</returns>
		StringCollection IQueryList.GetAccountsArr()
		{
			IQueryList objGetAccountsArr = (IQueryList)new ADServices();
			return objGetAccountsArr.GetAccountsArr(CONST_ADSPATH);
		}
		#endregion
		#region[用户组成员]
		/// <summary>
		/// 用户组的清单
		/// </summary>
		/// <param name="strUser">用户名</param>
		/// <returns>StringCollection</returns>
		StringCollection IQueryList.GetUserGroupMembershipArr(string strUser)
		{
			IQueryList objGetUserGroupMembershipArr = (IQueryList)new ADServices();
			return objGetUserGroupMembershipArr.GetUserGroupMembershipArr(CONST_DOMAIN,strUser);
		}
		/// <summary>
		/// 用户组的清单
		/// </summary>
		/// <param name="strUser">用户名</param>
		/// <returns>DataView</returns>
		DataView IQueryList.GetUserGroupMembershipList(string strUser)
		{
			IQueryList objGetUserGroupMembershipList = (IQueryList)new ADServices();
			return objGetUserGroupMembershipList.GetUserGroupMembershipList(CONST_DOMAIN,strUser);

		}
		/// <summary>
		/// 用户组的清单
		/// </summary>
		/// <param name="strDomain">域名</param>
		/// <param name="strUser">用户</param>
		/// <returns>DataView</returns>
		DataView IQueryList.GetUserGroupMembershipList(string strDomain,string strUser)
		{
			strDomain = "LDAP://DC=" + strDomain + ",DC=esquel,DC=com";
			strFilter = "(sAMAccountName=" + strUser + ")";
			strPropertiesToLoad = "Name,ADsPath";
			try
			{
				//***********执行方法************
				//得到查询结果,并赋给mySearcher
				GetOUList(strDomain,strFilter,strPropertiesToLoad,SearchScope.Subtree);
				//*******************************
				//新建列名
				myTable = new DataTable();
				foreach(string colName in mySearcher.PropertiesToLoad)
					myTable.Columns.Add(colName,Type.GetType ("System.String"));
				SearchResult res = mySearcher.FindOne();
				if (null != res)
				{
					DirectoryEntry obUser = new DirectoryEntry(res.Path);
					//调用得到组的方法
					object obGroups = obUser.Invoke("Groups");
					//填充数据
					foreach (object ob in (IEnumerable)obGroups)
					{
						DirectoryEntry obGpEntry = new DirectoryEntry(ob);
						myRow= myTable.NewRow();
						myRow["Name"] = obGpEntry.Name.Substring(4);
						myRow["ADsPath"] = obGpEntry.Path;
						myTable.Rows.Add(myRow);

						obGpEntry.Close();
						obGpEntry.Dispose();
					}
					obUser.Close();
					obUser.Dispose();
				}
			}
			catch (Exception err)
			{
				strErrDescription = err.ToString();
			}
			finally
			{
				myEntry.Close();
				myEntry.Dispose();
				mySearcher.Dispose();
			}
			return myTable.DefaultView;
		}
		/// <summary>
		/// 用户组的清单
		/// </summary>
		/// <param name="strDomain">域名</param>
		/// <param name="strUser">用户名</param>
		/// <returns>StringCollection</returns>
		StringCollection IQueryList.GetUserGroupMembershipArr(string strDomain,string strUser)
		{
			strDomain = "LDAP://DC=" + strDomain + ",DC=esquel,DC=com";
			strCollection = new StringCollection();
			strFilter = "(sAMAccountName=" + strUser + ")";
			try
			{
				//***********执行方法************
				//得到查询结果,并赋给mySearcher
				GetOUList(strDomain,strFilter,"",SearchScope.Subtree);
				//*******************************
				SearchResult res = mySearcher.FindOne();
				if (null != res)
				{
					DirectoryEntry obUser = new DirectoryEntry(res.Path);
					//调用得到组的方法
					object obGroups = obUser.Invoke("Groups");
					foreach (object ob in (IEnumerable)obGroups)
					{
						DirectoryEntry obGpEntry = new DirectoryEntry(ob);
						strCollection.Add(obGpEntry.Name.Substring(4));
						obGpEntry.Close();
						obGpEntry.Dispose();
					}
					obUser.Close();
					obUser.Dispose();
				}
			}
			catch (Exception err)
			{
				strErrDescription = err.ToString();
			}
			finally
			{
				myEntry.Close();
				myEntry.Dispose();
				mySearcher.Dispose();
			}
			return strCollection;

		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -