我在自定义 Active Directory RoleProvider 中创建了以下方法:
public override string[] GetRolesForUser(string username)
{
ArrayList results = new ArrayList();
using (var principalContext = new PrincipalContext(
ContextType.Domain, null, domainContainer))
{
var user = UserPrincipal.FindByIdentity(
principalContext, IdentityType.SamAccountName, username);
foreach (string acceptibleGroup in GroupsToInclude)
{
GroupPrincipal adGroup = GroupPrincipal.FindByIdentity(
principalContext, acceptibleGroup);
if (user.IsMemberOf(adGroup))
results.Add(acceptibleGroup);
}
}
return results.ToArray(typeof(string)) as string[];
}
它只检查我的应用程序中使用的角色白名单。问题是,如果用户不是其中一个角色的成员,我会得到PrincipalOperationException
一个
if (user.IsMemberOf(adGroup))
行被执行。如果用户不在组中,我希望这会简单地返回 `false。这里出了什么问题?
编辑:顺便说一句
,如果我调用user.GetAuthorizationGroups()
并尝试遍历结果,我会得到一个 COMException - 指定的目录服务属性或值不存在。