GenericPrincipal против ClaimsPrincipal.Разница в пользовательском свойстве внутри Razor view - PullRequest
0 голосов
/ 31 мая 2018

У меня есть проект (MVC5 с шаблоном SPA), в котором мне нужно скопировать функциональность из другого проекта.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

enter image description here

Но при отладке RazorПосмотрите в моем новом проекте свойство User другого типа: System.Security.Claims.ClaimsPrincipal

enter image description here

Мне любопытно, почему есть разница, и поэтому яне может проверить роли непосредственно с System.Security.Claims.ClaimsPrincipal?

1 Ответ

0 голосов
/ 04 июня 2018

GenericPrincipal назначается внутри пользовательского фильтра.Проблема заключалась в том, что Razor View вызывается из контроллера [AllowAnonymous], который переопределяет мой фильтр, поэтому назначение GenericPrincipal пользователю пропускается.

...