GenericPrincipal vs ClaimsPrincipal。 Razor视图中用户属性的差异

时间:2018-05-31 14:02:15

标签: c# asp.net-mvc-5 roles claims

我有一个项目(带有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

enter image description here

但是当我在新项目中调试Razor View时,User属性是另一种类型:System.Security.Claims.ClaimsPrincipal

enter image description here

我很好奇为什么会有差异,因此我无法直接从System.Security.Claims.ClaimsPrincipal查看角色?

1 个答案:

答案 0 :(得分:1)

GenericPrincipal在自定义过滤器中分配。 问题是Razor View是从[AllowAnonymous]控制器调用的,它会覆盖我的过滤器,因此会跳过向用户分配GenericPrincipal