检查用户是否在角色中或没有嵌套?
Check if user is in role or not nestedly?
有什么方法可以检查用户是否嵌套了特定角色?例如
@if(User.IsInRole("Admin"){
<div class="div1"> </div>
@if(User.IsInRole("AdminAssitant"){
<div class="div2"> </div>
}
}
我的意思是,如果用户是 Admin
,我想同时显示 divs
,否则只显示 div2
。我不想这样创建:
@if(User.IsInRole("Admin"){
<div class="div1"> </div>
<div class="div2"> </div>
}
@if(User.IsInRole("AdminAssitant"){
<div class="div2"> </div>
}
因为这只是一个示例,所以我有非常复杂的场景。
因为是嵌套的,如果角色不是admin,那么AssistantAdmin语句永远不会被检查。因此,您将无法完全像那样完成嵌套检查。
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>
}
}
角色并非真正设计用于嵌套。这通常是由于误解了 "role" 是什么。严格来说,角色只是一种特权:诸如 CanEdit
、CanDelete
之类的东西。它们应该是建立起来的。因此,例如 "Admin" 只是具有一组所有可用角色的用户。创建一个实际的 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。
有什么方法可以检查用户是否嵌套了特定角色?例如
@if(User.IsInRole("Admin"){
<div class="div1"> </div>
@if(User.IsInRole("AdminAssitant"){
<div class="div2"> </div>
}
}
我的意思是,如果用户是 Admin
,我想同时显示 divs
,否则只显示 div2
。我不想这样创建:
@if(User.IsInRole("Admin"){
<div class="div1"> </div>
<div class="div2"> </div>
}
@if(User.IsInRole("AdminAssitant"){
<div class="div2"> </div>
}
因为这只是一个示例,所以我有非常复杂的场景。
因为是嵌套的,如果角色不是admin,那么AssistantAdmin语句永远不会被检查。因此,您将无法完全像那样完成嵌套检查。
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>
}
}
角色并非真正设计用于嵌套。这通常是由于误解了 "role" 是什么。严格来说,角色只是一种特权:诸如 CanEdit
、CanDelete
之类的东西。它们应该是建立起来的。因此,例如 "Admin" 只是具有一组所有可用角色的用户。创建一个实际的 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。