Утверждения AspNetCore MVC - Утверждения IsInRoleAsync verus - PullRequest
0 голосов
/ 15 января 2019

В моем приложении MVC для ядра aspnet, если я получаю пользователя с помощью введенного UserManager, тогда возвращается следующее: true:

await _userManager.IsInRoleAsync( user, "Administrator" );

Однако всякий раз, когда я проверяю User (ClaimsPrincipal)в подобном представлении требование отсутствует (возвращает false):

User.IsInRole( "Administrator" );

Мне это кажется несовместимым.

Нужно ли мне где-то вручную устанавливать утверждения Role?Я предполагал, что это будет бесплатно и что пользовательский UserClaimsPrincipalFactory будет использоваться для утверждений для приложений, а не для ролей (которые поставляются из коробки с MVC).

Чего мне не хватает?

1 Ответ

0 голосов
/ 16 января 2019

Это известная проблема в версии 2.1 и исправлена ​​в 2.2 preview-1.

В asp.net core 2.1 используется AddDefaultIdentity, и впрыск становится равным

services.AddDefaultIdentity<IdentityUser>()
            .AddRoles<IdentityRole>()

, не сделает Roles включенным по умолчанию и всегда возвращает false для User.IsInRole.

Чтобы обойти это, вместо использования нового AddDefaultIdentity<TUser>() для настройки Identity, просто используйте API старого стиля:

 services.AddIdentity<IdentityUser, IdentityRole>()
    .AddRoleManager<RoleManager<IdentityRole>>()
    .AddDefaultUI()
    .AddDefaultTokenProviders()
    .AddEntityFrameworkStores<ApplicationDbContext>();

Другой способ заключается в том, что вы можете заменить фабрику UserClaimsPrincipal на фабрику с учетом ролей. Добавьте ниже код в ConfigureService и обратитесь к UserRoles в DefaultIdentity

services.AddScoped<IUserClaimsPrincipalFactory<IdentityUser>, UserClaimsPrincipalFactory<IdentityUser, IdentityRole>>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...