gpt4 book ai didi

C# System.DirectoryServices.AccountManagement 未知错误 (0x80005000) UserPrincipal.IsMemberOf()

转载 作者:太空狗 更新时间:2023-10-30 00:44:19 29 4
gpt4 key购买 nike

类似于以下 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);
}

有趣的是,只有当用户不直接在组中,而是目标组中的组成员时,它才会返回错误。

例如:

Steve 和 Sam 是两个用户,GroupParent 和 GroupChild 是两个组。 Steve 和 GroupChild 是 GroupParent 的成员。 Sam 是 GroupChild 的成员。如果我在 (Steve, GroupParent) 上调用此函数,它会返回 true。如果我在 (Sam, GroupParent) 上调用它,我会收到错误消息。如果我在 ("fdkjskghkf", GroupParent) 上调用它,它会返回 false。

我在上面链接了一篇有类似问题的文章,但他的解决方案对我不起作用,我仍然遇到同样的错误。想法?

最佳答案

感谢 Jon Theriault here以下代码为我解决了这个问题。

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);

关于C# System.DirectoryServices.AccountManagement 未知错误 (0x80005000) UserPrincipal.IsMemberOf(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8142110/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com