Как использовать роли в .NET MVC Core - PullRequest
1 голос
/ 14 марта 2019

Я уже несколько дней пытаюсь реализовать роли в проекте MVC. Я запустил новый проект и выбрал Аутентификацию в «Индивидуальная учетная запись пользователя». Я добавил [Authorize] на главную страницу HomeControllers, и все работает. Чтобы добавить роль, я включил:

services.AddDefaultIdentity<IdentityUser>().AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();

в startup.cs -> ConfigureServices а затем добавил вызов для следующих функций из автозагрузки-> Конфигурировать

private async Task CreateRole(IServiceProvider serviceProvider)
{
    var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
    IdentityResult roleResult;
    roleResult = await RoleManager.CreateAsync(new IdentityRole("Admin"));
}

private async Task SetUserAdmin(string username, IServiceProvider serviceProvider)
{
    var UserManager = serviceProvider.GetRequiredService<UserManager<IdentityUser>>();
    IdentityUser user = await UserManager.FindByEmailAsync(username);
    await UserManager.AddToRoleAsync(user, "Admin");
}

это создаст роль «Администратор» и свяжет ее с конкретным пользователем. Когда я смотрю на таблицу в БД через:

select * from AspNetRoles
select * from AspNetUsers
select * from AspNetUserRoles

Таблицы заполнены и связаны друг с другом, но когда я использую [Authorize (Roles = "Admin")], появляется страница 401 ошибки, но когда я зачитываю роли для пользователя через:

var roles = await UserManager.GetRolesAsync(await UserManager.FindByEmailAsync(username));

Будет возвращено значение «Администратор».

В чем может быть проблема? Большое спасибо за любые предложения!

1 Ответ

0 голосов
/ 15 марта 2019

Как вы добавили Identity в файл запуска?Я думаю, что это не так с services.AddIdentity.

Я использую:

services.AddIdentity<IndentityUser, IdentityRole>(options => options.Stores.MaxLengthForKeys = 128)
                .AddEntityFrameworkStores<ApplicationDbContext>()
                .AddDefaultTokenProviders();

Это известная ошибка для .Net Core 2.1 .net core identity 2.1 авторизация не работает

Должен быть решен в 2.2

...