Почему @ User.IsInRole всегда возвращает false в _Layout.cshtml - PullRequest
1 голос
/ 15 мая 2019

Я использую Razor-Pages для разработки веб-приложения.В моем файле _Layout.cshtml я хочу изменить меню в соответствии с ролью текущего пользователя.Поэтому я использую User.IsInRole(string role), но всегда возвращает false.

В аналогичном вопросе я читал, что невозможно получить роль пользователя сразу после входа в систему.Однако я не понимаю, почему это так.

Мой код:

@if (User.IsInRole(Roles.Admin.ToString())) {
  <li><a asp-page="/AdminMenuPoint">Admin Menu</a>a/li>
}

Мои роли enum:

public enum Roles {
  Supervisor, Admin
};

Подводя итог: Почему нет'User.IsInRole() работает на мою страницу (после входа в систему)?

Заранее спасибо.

1 Ответ

1 голос
/ 15 мая 2019

Если вы используете .Net Core, вам нужно настроить:

  1. Добавить службу идентификации в Startup.cs

Отредактировано

services.AddDefaultIdentity<ApplicationUser>()
   .AddRoles<IdentityRole>() // <-- Add this line
    .AddEntityFrameworkStores<ApplicationDbContext>();

В соответствии с этим обсуждением на GitHub получение ролей и утверждений для отображения в файле cookie включает в себя либо возвращение к коду инициализации service.AddIdentity, либо использование service.AddDefaultIdentity и добавление этой строки кода в ConfigureServices:

// Add Role claims to the User object
// See: https://github.com/aspnet/Identity/issues/1813#issuecomment-420066501
services.AddScoped<IUserClaimsPrincipalFactory<ApplicationUser>, UserClaimsPrincipalFactory<ApplicationUser, IdentityRole>>();
Создание роли и назначение пользователя для роли
private async Task CreateUserRoles(IServiceProvider serviceProvider)
{
 var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
 var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();

 IdentityResult roleResult;
 //Adding Admin Role
 var roleCheck = await RoleManager.RoleExistsAsync("Admin");
 if (!roleCheck)
 {
 //create the roles and seed them to the database
 roleResult = await RoleManager.CreateAsync(new IdentityRole("Admin"));
 }
 //Assign Admin role to the main User here we have given our newly registered 
 //login id for Admin management
 ApplicationUser user = await UserManager.FindByEmailAsync("syedshanumcain@gmail.com");
 var User = new ApplicationUser();
 await UserManager.AddToRoleAsync(user, "Admin");
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...