有没有办法检查用户是否特别嵌入了角色? 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>
}
因为它只是一个样本我有非常复杂的情况。
答案 0 :(得分:1)
角色并非真正设计为嵌套。这通常是由于对“角色”的误解。严格来说,角色只是一种特权: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>
}
}
这样,任何一个角色都会获得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>
}
}