public class DirectoryHelper
{
public static string DomainName = System.Environment.UserDomainName;
public static string strLDAP = "LDAP://" + DomainName;
static DirectoryEntry de = new DirectoryEntry(strLDAP);
/// <summary>
/// 根据登录名获取用户域fullname
/// </summary>
/// <param name="AccountName"></param>
/// <returns></returns>
public static string getFullNameByAccountName(string AccountName)
{
string FullName = string.Empty;
DirectorySearcher ds = new DirectorySearcher(de);
ds.Filter = string.Format("(SAMAccountName={0})", AccountName);
using (HostingEnvironment.Impersonate())
{
foreach (SearchResult sr in ds.FindAll())
{
string fullName = sr.GetDirectoryEntry().Name.ToString();
//if (sr.GetDirectoryEntry().Properties["samaccountname"].Value.ToString().ToLower() == AccountName)
//{
FullName = fullName.Substring(, fullName.Length - );
// }
}
}
return FullName;
} /// <summary>
/// 获取所有用户
/// </summary>
/// <returns></returns>
public static DataTable getAllPeople()
{
DataTable dt = new DataTable();
DataColumn dc_accountName = new DataColumn("AccountName", typeof(string));
DataColumn dc_mail = new DataColumn("Mail", typeof(string));
DataColumn dc_fullName = new DataColumn("FullName", typeof(string));
dt.Columns.Add(dc_fullName);
dt.Columns.Add(dc_accountName);
dt.Columns.Add(dc_mail);
DirectorySearcher search = new DirectorySearcher(de);
search.Filter = "(&(objectClass=user))";
search.SearchScope = SearchScope.Subtree;
//模拟用户登录(发布的时候不添加要报错)
using (HostingEnvironment.Impersonate())
{
SearchResultCollection SearchResults = search.FindAll();
if (SearchResults.Count > )
{
foreach (SearchResult sr in SearchResults)
{
DirectoryEntry GroupEntry = sr.GetDirectoryEntry();
string accountName = string.Empty;
string fullName = string.Empty;
string mail = string.Empty;
DataRow dr = dt.NewRow();
//先获取邮件属性,如果邮件不是空,说明是要取的部门
if (GroupEntry.Properties.Contains("mail"))
{
mail = GroupEntry.Properties["mail"][].ToString();
dr["Mail"] = mail;
if (GroupEntry.Properties.Contains("SAMAccountName"))
{
accountName = GroupEntry.Properties["SAMAccountName"][].ToString();
dr["AccountName"] = accountName;
}
if (GroupEntry.Properties.Contains("Name"))
{
fullName = GroupEntry.Properties["Name"][].ToString();
dr["FullName"] = fullName;
}
dt.Rows.Add(dr);
}
}
}
}
return dt;
} /// <summary>
/// 根据全名获取登录名
/// </summary>
/// <param name="fullName"></param>
/// <returns></returns>
public static string getAccountNameByFullName(string fullName)
{
string accountName = string.Empty;
DirectorySearcher ds = new DirectorySearcher(de);
ds.Filter = string.Format("(cn={0})", fullName);
using (HostingEnvironment.Impersonate())
{
SearchResult sr = ds.FindOne();
if (sr != null)
{
if (sr.GetDirectoryEntry().Properties.Contains("samaccountname"))
{
accountName = sr.Properties["samaccountname"][].ToString(); //accountName = accountName.Substring(3, accountName.Length - 3);
}
}
}
return accountName;
} /// <summary>
/// 判断用户是否存在
/// </summary>
/// <param name="FullName"></param>
/// <returns></returns>
public static bool checkUserExist(string FullName)
{
bool Exist = false;
DirectorySearcher deSearch = new DirectorySearcher(de);
deSearch.Filter = "(&(&(objectCategory=person)(objectClass=user))(cn=" + FullName + "))";
deSearch.SearchScope = SearchScope.Subtree;
//模拟用户登录(发布的时候不添加要报错)
using (HostingEnvironment.Impersonate())
{
SearchResult result = deSearch.FindOne();
if (result != null)
{
Exist = true;
}
return Exist;
}
} #region 根据登录名获取用户所在组
public static DataTable getGroupByAccountName(string AccountName)
{
DataTable dt = new DataTable("group");
DataColumn groupName = new DataColumn("Name", typeof(string));
dt.Columns.Add(groupName); DirectorySearcher search = new DirectorySearcher(de);
search.Filter = "(&(sAMAccountName=" + AccountName + "))";
search.PropertiesToLoad.Add("memberof");
using (HostingEnvironment.Impersonate())
{
SearchResult result = search.FindOne();
if (result == null)
{
DataRow dr = dt.NewRow();
dr["Name"] = "暂无数据";
dt.Rows.Add(dr);
}
else
{
string[] results = new string[result.Properties["memberof"].Count + ];
for (int i = ; i < result.Properties["memberof"].Count; i++)
{
string theGroupPath = result.Properties["memberof"][i].ToString();
string tempName = theGroupPath.Substring(, theGroupPath.IndexOf(",") - );
if (tempName == "全体员工" || tempName == "VPN"||tempName=="经理级人员") { }
else
{
DataRow dr = dt.NewRow();
dr["Name"] = theGroupPath.Substring(, theGroupPath.IndexOf(",") - );
dt.Rows.Add(dr);
}
}
}
} return dt;
}
#endregion #region 获取it部门成员
public static DataTable getAllMembersByGroupName(string GroupName)
{
DataTable dt_ItMembers = new DataTable();
DataColumn dc_ItMembers = new DataColumn("Name", typeof(string));
dt_ItMembers.Columns.Add(dc_ItMembers); DirectorySearcher search_ItMember = new DirectorySearcher(de);
search_ItMember.Filter = "(&(objectClass=group)(cn=" + GroupName + "))";
//模拟用户登录(发布的时候不添加要报错)
using (HostingEnvironment.Impersonate())
{
SearchResult search_It = search_ItMember.FindOne();
if (search_It != null)
{
int memberCount = search_It.Properties["member"].Count;
for (int i = ; i < memberCount; i++)
{
if (!string.IsNullOrEmpty(search_It.Properties["member"][i].ToString()))
{
string name = search_It.Properties["member"][i].ToString();
name = name.Substring(, name.IndexOf(",") - );
DataRow dr_itMembersName = dt_ItMembers.NewRow();
dr_itMembersName["Name"] = name;
dt_ItMembers.Rows.Add(dr_itMembersName);
}
}
}
else
{
DataRow dr_none = dt_ItMembers.NewRow();
dr_none["Name"] = "暂无数据";
dt_ItMembers.Rows.Add(dr_none);
}
}
return dt_ItMembers;
}
#endregion #region 获取所有部门
public static DataTable getAllGroup()
{
DataTable dt_group = new DataTable();
DataColumn dc_group = new DataColumn("GroupName", typeof(string));
dt_group.Columns.Add(dc_group); DirectorySearcher search_ItMember = new DirectorySearcher(de);
search_ItMember.Filter = "(&(objectClass=group))";
search_ItMember.SearchScope = SearchScope.Subtree;
//模拟用户登录(发布的时候不添加要报错)
using (HostingEnvironment.Impersonate())
{
SearchResultCollection SearchResults = search_ItMember.FindAll();
if (SearchResults.Count > )
{
foreach (SearchResult sr in SearchResults)
{
DirectoryEntry GroupEntry = sr.GetDirectoryEntry();
//先获取邮件属性,如果邮件不是空,说明是要取的部门
if (GroupEntry.Properties.Contains("mail"))
{
string mail = GroupEntry.Properties["mail"][].ToString();
if (!string.IsNullOrEmpty(mail))
{
string groupName = string.Empty;
if (GroupEntry.Properties.Contains("Name"))
{
groupName = GroupEntry.Properties["Name"][].ToString();
}
DataRow dr_group = dt_group.NewRow();
dr_group["GroupName"] = groupName;
dt_group.Rows.Add(dr_group);
}
}
}
}
}
return dt_group;
}
#endregion #region 根据全名获取邮箱
public static string getMailByFullName(string fullName)
{
string mail = string.Empty;
DirectorySearcher ds = new DirectorySearcher(de);
ds.Filter = "(&(cn=" + fullName + "))";
using (HostingEnvironment.Impersonate())
{
SearchResult result = ds.FindOne();
if (result != null)
{
mail = result.Properties["mail"][].ToString();
}
return mail;
}
}
#endregion /// <summary>
/// 判断是不是IT部门的人
/// </summary>
/// <param name="AccountName"></param>
/// <returns></returns>
public static bool IsItGroup(string AccountName)
{
bool IsItGroupMember = false; DirectorySearcher search = new DirectorySearcher(de);
search.Filter = "(&(sAMAccountName=" + AccountName + "))";
search.PropertiesToLoad.Add("memberof");
using (HostingEnvironment.Impersonate())
{
SearchResult result = search.FindOne();
if (result != null)
{
for (int i = ; i < result.Properties["memberof"].Count; i++)
{
string theGroupPath = result.Properties["memberof"][i].ToString();
if (theGroupPath.Substring(, theGroupPath.IndexOf(",") - ) == "IT")
{
IsItGroupMember = true; return IsItGroupMember;
}
}
}
}
return IsItGroupMember;
}
}

调用:

 //获取当前登录电脑的用户名
string name = System.Environment.UserName.ToLower();
string fullname= DirectoryHelper.getFullNameByAccountName(System.Environment.UserName.ToLower());
bool b_ITGroupMember = DirectoryHelper.IsItGroup(name);

  

发布到IIS上后要修改IIS配置

ASP.NET impersonation和window authentication设置成启用,

其他的Annoymous authentication都设置成禁用

应用程序池设置成经典

DirectoryEntry 活动目录的使用的更多相关文章

  1. c#活动目录操作

    c#活动目录操作  https://www.cnblogs.com/ahuo/archive/2007/03/16/676853.html 添加引用 System.DirectoryServices导 ...

  2. Step by step 活动目录中添加一个子域

    原创地址:http://www.cnblogs.com/jfzhu/p/4006545.html 转载请注明出处 前面介绍过如何创建一个域,下面再介绍一下如何在该父域中添加一个子域. 活动目录中的森林 ...

  3. SharePoint 2010中重置windows 活动目录(AD)域用户密码的WebPart(免费下载)

    由于SharePoint 2013推出不久,并非所有的企业都会升级到SharePoint 2013的,毕竟升级不是打打补丁这么简单,更多的企业还是使用Sharepoint 2010版本的,因此本人自行 ...

  4. SharePoint 2013中修改windows 活动目录(AD)域用户密码的WebPart(免费下载)

    前段时间工作很忙,好久没更新博客了,趁国庆休假期间,整理了两个之前积累很实用的企业集成组件,并在真正的大型项目中经受住了考验:.Net版SAP RFC适配器组件和SharePoint 2013修改AD ...

  5. sql server 2008 在安装了活动目录以后无法启动服务了

    软件环境: windows server 2008 r2 ms sql server 2008 r2 在安装活动目录以前,数据库是正常运行的. 安装了活动目录以后,数据库启动时就提示无法启动.出错的信 ...

  6. Delphi访问活动目录

    活动目录Active Directory是用于Windows Server的目录服务,它存储着网络上各种对象的有关信息,并使该信息易于管理员和用户查找及使用.Active Directory使用结构化 ...

  7. windows server 2012 AD 活动目录部署系列(五)备份和还原域控制器

    在前篇博文中,我们介绍了用户资源的权限分配,用户只要在登录时输入一次口令,就能访问基于该域所分配给他的所有资源. 但是我们需要考虑一个问题:万一域控制器坏了怎么办?!如果这个域控制器损坏了,那用户登录 ...

  8. 网络操作系统 第六章 Window Server 2008 活动目录

    本章小结 在企业网络中,活动目录是必不可少的,它将网络中各种对象组织起来进行管理,方便了网络对象的查找,增强了网络的安全性,为用户的物流管理提供了极大的便利,本章首先介绍了活动目录的基本概念,然后通过 ...

  9. windows 活动目录双向信任配置

    活动目录A:ess.com 192.168.1.20/24 活动目录B:ups.com  192.168.1.30/24 Step1:在活动目录B的域控制器上配置域的林双向信任关系,并且可传递,如下图 ...

随机推荐

  1. 使用Mybatis Generator自动生成Mybatis相关代码

    本文将简要介绍怎样利用Mybatis Generator自动生成Mybatis的相关代码: 一.构建一个环境: 1. 首先创建一个表: CREATE TABLE pet (name VARCHAR(2 ...

  2. Android 多屏幕适配

    问题: 测试时,发现应用在不同的显示器上显示效果不同(部分文本不能显示完全),自然想到屏幕适配的问题. 按照思路整理如下: (一) 几个概念 1, Screen size 屏幕的尺寸,即对角线长度(单 ...

  3. 商务部公开微软持有的Android技术专利

    微软与众多Android厂商签署了专利授权协议,但从来没有公开它持有多少项Android技术专利.出人意料的是,为了收购诺基亚手机业务,微软今年4月递交到中国商务部的文件中完整公开了它的Android ...

  4. Linq的延迟

    书名:LINQ: The Future of Data Access in C# 3.0 Learn LINQ and the C# 3.0 Features That Support It http ...

  5. SharePoint Site Pages & Application Pages

    转:http://www.wcode.net/plus/view.php?aid=1582071 SharePoint一个很重要的概念就是Site Pages和Application Pages.接触 ...

  6. 从零开始学习jQuery (六) AJAX快餐

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章讲解如何使用jQuery方便快捷的实现A ...

  7. hibernate之参数绑定

    hibernate之参数绑定 ---------- 我们应该拒绝SQL(或HQL)的拼装,应该永远不要编写这样的代码,有这很严重的安全问题,众所周知的SQL注入.我们可以考虑参数绑定,在hiberna ...

  8. [Buffalo] 一些SQL函数

    取得当前时间的函数:GETDATE() 计算时间的函数:DATEADD(datepart,number,date) 计算两个时间差额:DATEDIFF(datepart,startdate,endda ...

  9. Nhibernate Icreteria 分页查询

    1.创建查询条件,条件为一个ICreterion的列表 ///        /// 创建Criteria(不含order,因为获取总数的时候,为了性能考虑,不加order)        ///   ...

  10. 不使用CvvImage类来在MFC中显示图像

    /* * ===================================================================================== * * Filen ...