检查用户是否处于角色中?

时间:2017-05-31 16:42:16

标签: asp.net-mvc roles

有没有办法检查用户是否特别嵌入了角色? e.g。

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

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

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

}

我的意思是,如果用户为divs,我想同时显示Admin,否则只显示div2。我不想这样创作:

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

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

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

因为它只是一个样本我有非常复杂的情况。

3 个答案:

答案 0 :(得分:1)

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

AdminAdminAssistant之类的上下文中,您处于成员资格领域,而 在自然界。一个组可以成为另一个组的一部分,权限可以在所有级别中向下流动。

回到此处的实际问题,您只需要对层次结构进行建模,因为无法在角色上实际强加该层次结构。这基本上意味着做类似的事情:

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

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

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

这样,任何一个角色都会获得div1,但只有AdminAssistant才会获得div2。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

https://msdn.microsoft.com/en-us/library/system.web.security.roleprincipal.getroles(v=vs.110).aspx

非常感兴趣别人会如何处理这个问题。

视图中的示例:

@{
    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>
    }
}