GenericPrincipal 与 ClaimsPrincipal。 Razor 视图中用户 属性 的差异
GenericPrincipal vs ClaimsPrincipal. Difference in User property inside Razor view
我有一个项目(带 SPA 模板的 MVC5),我需要从另一个项目复制功能。 User.IsInRole() 在 Razor 中不起作用。
基本上角色是这样分配的:
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 视图时 User
属性 是另一种类型:System.Security.Claims.ClaimsPrincipal
我很好奇为什么会有差异,因此我无法直接从 System.Security.Claims.ClaimsPrincipal
检查角色?
GenericPrincipal
在自定义过滤器中分配。
问题是 Razor 视图是从 [AllowAnonymous]
控制器调用的,它覆盖了我的过滤器,因此跳过了 GenericPrincipal
给用户的分配。
我有一个项目(带 SPA 模板的 MVC5),我需要从另一个项目复制功能。 User.IsInRole() 在 Razor 中不起作用。
基本上角色是这样分配的:
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 视图时 User
属性 是另一种类型:System.Security.Claims.ClaimsPrincipal
我很好奇为什么会有差异,因此我无法直接从 System.Security.Claims.ClaimsPrincipal
检查角色?
GenericPrincipal
在自定义过滤器中分配。
问题是 Razor 视图是从 [AllowAnonymous]
控制器调用的,它覆盖了我的过滤器,因此跳过了 GenericPrincipal
给用户的分配。