Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 检查用户是否处于角色中?_Asp.net Mvc_Roles - Fatal编程技术网

Asp.net mvc 检查用户是否处于角色中?

Asp.net mvc 检查用户是否处于角色中?,asp.net-mvc,roles,Asp.net Mvc,Roles,有没有办法检查用户是否嵌套在特定的角色中?e、 g @if(User.IsInRole("Admin"){ <div class="div1"> </div> @if(User.IsInRole("AdminAssitant"){ <div class="div2"> </div> } } 因为它只是一个示例,所以我有一个非常复杂的场景。因为它是嵌套的,如果角色不是admin,那么永远不会检查AssistantAdmi

有没有办法检查用户是否嵌套在特定的角色中?e、 g

@if(User.IsInRole("Admin"){

  <div class="div1"> </div>

  @if(User.IsInRole("AdminAssitant"){
     <div class="div2"> </div>
  }

}

因为它只是一个示例,所以我有一个非常复杂的场景。

因为它是嵌套的,如果角色不是admin,那么永远不会检查AssistantAdmin语句。因此,您将无法完全像那样完成嵌套检查。

RolePrincipal.IsInRole方法不允许您在角色层次结构中向上或向下爬行。您可以使用RolePrincipal.GetRoles获取用户所属的所有角色的数组,如果该角色存在于该数组中,则可能会编写安全性

对其他人如何处理这一问题非常感兴趣

您认为的示例:

@{
    ViewBag.Title = "Example";
    string[] roles = ((RolePrincipal)User).GetRoles();
}

@if (roles.Contains("Admin"))
{
    <div class="div1">Weeee</div>
    if (roles.Contains("AdminAssitant"))
    {
        <div class="div2">Whoooa</div>
    }
}
@{
ViewBag.Title=“示例”;
字符串[]角色=((RolePrincipal)用户).GetRoles();
}
@if(roles.Contains(“Admin”))
{
威伊
if(roles.Contains(“AdminAssistant”))
{
哇
}
}

角色并不是真正设计成嵌套的。这通常是由于对“角色”的误解。严格地说,一个角色只是一种特权:像
CanEdit
CanDelete
,等等。它们应该被建立起来。例如,“管理员”就是一个拥有一组可用角色的用户。创建一个实际的
Admin
角色仅仅是暗示每个其他角色的成员身份的快捷方式,因为您可能偶尔会忽略将系统中的新角色分配给每个“Admin”用户

在类似于
Admin
AdminAssistant
的上下文中,您处于组成员的领域,组在本质上是分层的。一个组可以是另一个组的一部分,并且特权向下流动到所有级别

回到您的实际问题,您只需要对层次结构进行建模,因为无法将该层次结构实际强加给角色。这基本上意味着做一些事情,比如:

@if (User.IsInRole("Admin") || User.IsInRole("AdminAssistant")) {

    <div class="div1"> </div>

    @if (User.IsInRole("AdminAssistant")) {
        <div class="div2"> </div>
    }
}
@if(User.IsInRole(“Admin”)| User.IsInRole(“AdminAssistant”)){
@if(User.IsInRole(“AdminAssistant”)){
}
}

这样,两个角色都将获得div1,但只有
AdminAssistant
将获得div2

他的问题是处理基于角色的层次结构。他的例子是假设性的,而不是“为什么这不起作用”有什么办法解决这个问题吗?你可以在你的视图中这样做:@{ViewBag.Title=“example”;RolePrincipal rp=(RolePrincipal)User;string[]roles=rp.GetRoles();}@if(roles.Contains)(“Admin”){Weeee if(roles.Contains(“AdminAssistant”){whooa}
@if (User.IsInRole("Admin") || User.IsInRole("AdminAssistant")) {

    <div class="div1"> </div>

    @if (User.IsInRole("AdminAssistant")) {
        <div class="div2"> </div>
    }
}