我有一个使用ActiveDirecotry授权的应用程序,并且已经确定它需要支持嵌套的AD组,例如:
MAIN_AD_GROUP
|
|-> SUB_GROUP
|
|-> User
Run Code Online (Sandbox Code Playgroud)
所以,用户不是直接成员MAIN_AD_GROUP.我希望能够递归地查找用户,搜索嵌套的组MAIN_AD_GROUP.
主要问题是我使用的是.NET 3.5,并且.NET 3.5中存在一个错误System.DirectoryServices.AccountManagement,该方法UserPrincipal.IsMemberOf() 不适用于拥有超过1500个用户的组.所以我不能使用UserPrincipal.IsMemberOf()和不,我也无法切换到.NET 4.
我用以下函数解决了这个最后一个问题:
private bool IsMember(Principal userPrincipal, Principal groupPrincipal)
{
using (var groups = userPrincipal.GetGroups())
{
var isMember = groups.Any(g =>
g.DistinguishedName == groupPrincipal.DistinguishedName);
return isMember;
}
}
Run Code Online (Sandbox Code Playgroud)
但userPrincipal.GetGroups()只返回用户是其直接成员的组.
如何让它与嵌套组一起使用?