我有一个项目(带有SPA模板的MVC5),我需要从另一个项目中复制功能。 Razor中的User.IsInRole()不起作用。
基本上角色分配如下:
var currenIdentity = httpContext.User.Identity;
var roles = new List<string>();
roles.Add(Startup.AdministrationRole);
roles.Add(Startup.UserRole);
GenericPrincipal principal = new GenericPrincipal(currenIdentity, roles.ToArray());
httpContext.User = principal;
在Razor我有
@if (User.IsInRole(Startup.AdministrationRole))
{
@Html.ActionLink("Administrator »", "Config", "Admin", new { }, new { @class = "btn btn-default" })
}
在我调试的原始项目中,它所输入的User
属性为System.Security.Principal.GenericPrincipal
但是当我在新项目中调试Razor View时,User
属性是另一种类型:System.Security.Claims.ClaimsPrincipal
我很好奇为什么会有差异,因此我无法直接从System.Security.Claims.ClaimsPrincipal
查看角色?
答案 0 :(得分:1)
GenericPrincipal
在自定义过滤器中分配。
问题是Razor View是从[AllowAnonymous]
控制器调用的,它会覆盖我的过滤器,因此会跳过向用户分配GenericPrincipal
。