dig*_*dig 4 c# active-directory
与以下MSDN主题中的问题类似:http://social.msdn.microsoft.com/Forums/en-MY/csharplanguage/thread/4c9fea6c-1d0a-4733-a8ac-e3b78d10e999
我正在尝试验证给定用户是否是组的成员,而我们现有的功能解决方案太慢(13-16秒),我正在尝试加快速度.我目前有:
public bool IsMemberAD(string userName, string groupName)
{
var pc = new System.DirectoryServices.AccountManagement.PrincipalContext(System.DirectoryServices.AccountManagement.ContextType.Domain);
var user = System.DirectoryServices.AccountManagement.UserPrincipal.FindByIdentity(pc, System.DirectoryServices.AccountManagement.IdentityType.SamAccountName,
userName.ToLower());
var group = System.DirectoryServices.AccountManagement.GroupPrincipal.FindByIdentity(pc, groupName);
if (group == null || user == null) return false;
return user.IsMemberOf(group);
}
Run Code Online (Sandbox Code Playgroud)
使其有趣的是,它仅在用户不在组中时才返回错误,而是在目标组内的组成员中返回错误.
例如:
Steve和Sam是两个用户,GroupParent和GroupChild是两个用户.Steve和GroupChild是GroupParent的成员.Sam是GroupChild的成员.如果我在(Steve,GroupParent)上调用此函数,则返回true.如果我打电话给它(Sam,GroupParent),我会收到一个错误.如果我打电话给它("fdkjskghkf",GroupParent)它返回false.
我将上面的一篇文章与类似问题联系起来,但他的解决方案对我没有用,我仍然遇到同样的错误.想法?
由于乔恩Theriault 这里将下面的代码解决了这个问题对我来说.
string strName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; // "MW\\dalem"
// This is here because of a .Net error that gets 0x80005000 on "isUser = user.IsMemberOf(groupU);"
string domainName = strName.Split('\\')[0];
var pc = new PrincipalContext(ContextType.Domain, domainName);
Run Code Online (Sandbox Code Playgroud)