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. DLX模板

    对于数独问题 ; //3*3数独 ; // 一格能填9个数 9*9格 +; // 9*9*4=(9+9+9)*9+9*9 (9+9+9)是9行 9列 9格 *9是9个数 9*9是81个格子 +MaxM ...

  2. Qt 自定义model实现文件系统的文件名排序

    前段时间,需要做一个功能是要做文件系统的排序的功能.由于是自己写的model, 自己定义的数据结构.最初的想法只有一个自己去实现文件夹跟文件名的排序算法,不过感觉比较费时间.后来想到的是QFileSy ...

  3. Android 多屏幕适配

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

  4. ActionBar官方教程(11)自定义ActionBar的样式(含重要的样式属性表及练习示例)

    Styling the Action Bar If you want to implement a visual design that represents your app's brand, th ...

  5. ActionBar官方教程(9)ActionBar的顶部tab模式(注意,已经被弃用)

    This interface is deprecated.Action bar navigation modes are deprecated and not supported by inline ...

  6. Notification 多次传递参数 一直都是旧的 解决

    参考 :http://blog.163.com/caoguoqiang_dlut/blog/static/10658914220114167219320/ 问题描述: 在service中获取到数据,通 ...

  7. 【HDOJ】4057 Rescue the Rabbit

    挺有意思的一道题目,解法是AC自动机+DP.AC自动机建立fail指针时,一定要注意结点的属性也需要传递.AC自动机结合了trie和kmp的优点.需要注意的是,每个模式串仅计算一次,否则这题很难解. ...

  8. WCF - Hosting WCF Service

    After creating a WCF service, the next step is to host it so that the client applications can consum ...

  9. Android启动时间测试方法

    android apk启动时间可以通过下面的命令来完成测试,最终会生成一个mp4的视屏文件,通过播放录制好的视屏来统计app的启动时间精确到ms级别   例如:adb shell screenreco ...

  10. puTTY与SecureCRT的比较

    从网上看到别人对这两个工具的比较:从windows访问linux,除了samba之外,日常操作用得最多的大概就是PuTTY和SecureCRT Putty是免费的,SecureCRT是收费的(当然,有 ...