Создание ролей Identity Framework - PullRequest
0 голосов
/ 18 мая 2019

У меня проблема с созданием роли для пользователей. Я следую руководству ниже. https://gooroo.io/GoorooTHINK/Article/17333/Custom-user-roles-and-rolebased-authorization-in-ASPNET-core/32835#.XOBFAcgzbcs

Я добавил метод «CreateRoles» в «Startup.cs»

private async Task CreateRoles(IServiceProvider serviceProvider)
{
        //adding custom roles
        var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
        var UserManager = serviceProvider.GetRequiredService<UserManager<IdentityUser>>();
        string[] roleNames = { "Admin", "Manager", "Member" };
        IdentityResult roleResult;
        foreach (var roleName in roleNames)
        {
            //creating the roles and seeding them to the database
            var roleExist = await RoleManager.RoleExistsAsync(roleName);
            if (!roleExist)
            {
                roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName));
            }
        }
        //creating a super user who could maintain the web app
        var poweruser = new IdentityUser
        {
            UserName = Configuration.GetSection("UserSettings")["UserEmail"],
            Email = Configuration.GetSection("UserSettings")["UserEmail"]
        };
        string UserPassword = Configuration.GetSection("UserSettings")["UserPassword"];
        var _user = await UserManager.FindByEmailAsync(Configuration.GetSection("UserSettings")["UserEmail"]);
        if (_user == null)
        {
            var createPowerUser = await UserManager.CreateAsync(poweruser, UserPassword);
            if (createPowerUser.Succeeded)
            {
                //here we tie the new user to the "Admin" role 
                await UserManager.AddToRoleAsync(poweruser, "Admin");
                }
        }
}

Я называю это в "Настройка":

CreateRoles(serviceProvider).Wait();

При запуске приложения возникает исключение

AggregateException: произошла одна или несколько ошибок. (Служба для типа «Microsoft.AspNetCore.Identity.RoleManager`1 [Microsoft.AspNetCore.Identity.IdentityRole]» не зарегистрирована.)

Как это исправить?

1 Ответ

0 голосов
/ 20 мая 2019

Добавить AddRoles для добавления службы ролей:

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

Или замените метод AddDefaultIdentity на метод AddIdentity в методе ConfigureServices

services.AddIdentity<IdentityUser,IdentityRole>()
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();
...