Asp.net mvc 检查用户是否处于角色中?
有没有办法检查用户是否嵌套在特定的角色中?e、 gAsp.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
@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>
}
}