我正在尝试在C#中编写一个带有用户名和AD组名的Web服务,结果返回true或false。现在我正在做一些事情。
public static Boolean CheckGroupForUser(String username, String groupname) {
Boolean Success = false;
try
{
using (PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain))
using (UserPrincipal user = UserPrincipal.FindByIdentity(oPrincipalContext, username))
using (GroupPrincipal gp = GroupPrincipal.FindByIdentity(oPrincipalContext, groupname))
{
Success = user.IsMemberOf(gp);
}
}
catch (Exception)
{
Success = false;
}
return Success;
}
这很好用。如果用户在组中,则返回true,否则返回false。问题是这个。
假设我有一个名为TestGroup的AD组。 TestGroup中有一个名为Bob的用户。
CheckGroupForUser("Bob","TestGroup"); //true
让我们说用户Bob也在AD Group OtherGroup中。所以我将Bob从TestGroup中取出,但将OtherGroup添加到TestGroup。所以现在技术上Bob在TestGroup,但不是直接。
CheckGroupForUser("Bob","TestGroup"); //false
这是我需要帮助的地方。我需要这个场景是真的。抓住我的漂移?有什么建议吗?
答案 0 :(得分:1)
如果您使用System.DirectoryServices
,则可以执行此操作by using the rule LDAP_MATCHING_RULE_IN_CHAIN in your search。
基本上你使用像:
这样的过滤器(member:1.2.840.113556.1.4.1941:=userDN)
其中userDN是您感兴趣的用户的专有名称。