目前只能使用User.Identity.Name取到当前登录的AD用户名,如何取到此AD用户属于哪个AD组呢?
解决方案 »
- 谁有CrystalDecisions.Enterprise.Framework.dll, 跪谢!
- ClientScriptManager方面的问题!
- 急!急!急!急!为什么这段代码打印的是空白页啊?iTextSharp控件打印
- ASP.NET新手求指点
- ajax局部刷新世界
- 急求一sql语句!来者有分
- 急!高分求救!WEB中调用WORD打印报表的问题.解决完就结贴!
- 求msSQl的存储过程:更新整张表中的某一字段的所有值
- 我水晶报表的数据源设成Sqlserver的dataset,为什么运行时报错:“无法登录”?
- 依然排序问题?
- 循环读取数据
- 【分享】jquery简单的table合并单元格, 随便散个分。
以前对域操作的一些代码。希望对你有帮助private string GetNamingContext(string hostName, string userName, string Pwd)
{
using (DirectoryEntry de = new DirectoryEntry())
{
string path = String.Format("LDAP://{0}/rootDSE", hostName);
de.Username = userName;
de.Password = Pwd;
de.Path = path;
return de.Properties["defaultNamingContext"][0].ToString();
}
}//hostName为域名
public List<User> GetAllUsers(string hostName,string userName,string Pwd)
{
List<User> userList = new List<User>();
using (DirectoryEntry root = new DirectoryEntry())
{
string defaultNamingContext = GetNamingContext(hostName, userName, Pwd);
root.Path = string.Format("LDAP://{0}/{1}", hostName, defaultNamingContext);
root.Username = userName;
root.Password = Pwd;
using (DirectorySearcher searcher = new DirectorySearcher())
{
searcher.SearchRoot = root;
searcher.SearchScope = SearchScope.Subtree;
searcher.Filter = "(&(objectCategory=person)(objectClass=user))";
SearchResultCollection results = searcher.FindAll();
foreach (SearchResult result in results)
{
User user = new User();
user.UserID = result.Properties["sAMAccountName"][0].ToString(); //用户登录名
//某个属性可以取到userGroup,查下MSDN
user.UserName = result.Properties["Name"][0].ToString();//用户姓名
userList.Add(user);
}
}
}
return userList;
}
#
# AD:ms.com
#
# AD管理员:administrator
#
# AD管理员密码:pass@word1
#
# 组织单位名称:XX有限公司(不必理会其下有嵌套多少组织单位,通常都是部门)
#
# 现在要获取这一组织单位下的所有的用户信息,比如只要:帐号,姓名,邮件,所在组织这四个字段,具体实现如示例代码所示:
#
# private const string domainName = "ms.com";
#
# private const string adAdmin = "administrator";
#
# private const string password = "pass@word1";
#
# private const string ouName = "XX有限公司";
#
# private DataTable GetADUsers()
#
# {
#
# DataTable dt = new DataTable();
#
# dt.Columns.Add("sAMAccountName");//帐号
#
# dt.Columns.Add("Name");//姓名
#
# dt.Columns.Add("mail"); //邮箱地址
#
# dt.Columns.Add("OU"); //用户组织
#
# DirectoryEntry adRoot = new DirectoryEntry("LDAP://" + domainName, adAdmin, password, AuthenticationTypes.Secure);
#
# DirectoryEntry ou = adRoot.Children.Find("OU=" + ouName);
#
# DirectorySearcher mySearcher = new DirectorySearcher(ou);
#
# mySearcher.Filter = ("(objectClass=user)"); //user表示用户,group表示组
#
# foreach (System.DirectoryServices.SearchResult resEnt in mySearcher.FindAll())
#
# {
#
# DataRow dr = dt.NewRow();
#
# dr["sAMAccountName"] = string.Empty;
#
# dr["Name"] = string.Empty;
#
# dr["mail"] = string.Empty;
#
# dr["OU"] = string.Empty;
#
# DirectoryEntry user = resEnt.GetDirectoryEntry();
#
# if (user.Properties.Contains("sAMAccountName"))
#
# {
#
# dr["sAMAccountName"] = user.Properties["sAMAccountName"][0].ToString();
#
# }
#
# if (user.Properties.Contains("Name"))
#
# {
#
# dr["Name"] = user.Properties["Name"][0].ToString();
#
# }
#
# if (user.Properties.Contains("mail"))
#
# {
#
# dr["mail"] = user.Properties["mail"][0].ToString();
#
# }
#
# if (user.Parent.Name != string.Empty && user.Parent.Name.IndexOf('=') > -1)
#
# {
#
# //获取用户所在的组织单位
#
# dr["OU"] = user.Parent.Name.Split('=')[1];
#
# }
#
# dt.Rows.Add(dr);
#
# }
#
# return dt;
#
# }
#
# }
#
# 如果想要知道用户信息中都包含哪些字段,可以foreach出来看看
#
# DirectoryEntry user = resEnt.GetDirectoryEntry();
#
# foreach (string property in user.Properties.PropertyNames)
#
# {
#
# Console.WriteLine("字段名: " + property);
#
# }
Properties["memberOf"]
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Runtime.InteropServices.COMException: 未知错误(0x80005000)
以前做过这个,通常是从Properties里边去取。
请去Microsoft查找操作ad的bit程序代码,去仿写一下就好了。