我有以下代码来获取当前用户的AD安全组。
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
PrincipalSearchResult<Principal> groups = UserPrincipal.FindByIdentity(ctx, User.Identity.Name).GetAuthorizationGroups();
IEnumerable<string> groupNames = groups.Select(x => x.Name);
我已经检查过了,所有用户的安全组都包含在groupNames中。然而,以下逻辑不能正常工作——它阻止了"Admins"one_answers"Mgrs"以及其他所有人:
if (!(groupNames.Contains("Admins") || groupNames.Contains("Mgrs"))) { Response.Redirect("~/AccessDenied.aspx"); }
我也尝试过以下方法,但也不起作用——相反,它让每个人都可以查看页面:
if (groupNames.Contains("Admins") || groupNames.Contains("Mgrs"))
{
return;
}
else
{
Response.Redirect("~/AccessDenied.aspx");
}
我的语法或逻辑不正确吗?我需要"Admins"或"Mgrs"安全组中的所有用户都能够访问该页面,并且所有其他用户都应该重定向到AccessDenied.aspx。
这是一个使用visualstudio2019的asp.net网络表单应用程序。
我不知道为什么,但它现在正在工作。我使用相同的代码,没有更改。。。
if (groupNames.Contains("Admins") || groupNames.Contains("Mgrs"))
{
return;
}
else
{
Response.Redirect("~/AccessDenied.aspx");
}