C# - Создание ролей в методе семян - PullRequest
0 голосов
/ 07 мая 2020

Я хочу создать две роли для пользователей. Один из них является обычным пользователем, а другой - администратором. Поскольку я делаю все сначала кодом, как бы я go мог создать две роли, а затем назначить одного пользователя администратором, и все это в рамках метода начального значения (если возможно)

1 Ответ

0 голосов
/ 07 мая 2020

Я предполагаю, что вы используете Identity Context, в таком случае вы можете просто добавить класс, который будет выполнять раздачу и запускать его из Startup.cs / Program.cs в зависимости от ваших обстоятельств.

In в этом случае YourContext должен наследовать от IdentityDbContext<IdentityUser>

public class SeedUser
    {
        private readonly YourContext _context;
        private readonly UserManager<IdentityUser> _userManager;
        private readonly RoleManager<IdentityRole> _roleManager;

        public SeedUser(YourContext context, UserManager<IdentityUser> userManager, RoleManager<IdentityRole> roleManager)
        {
            _context = context;
            _userManager = userManager;
            _roleManager = roleManager;
        }
        public async Task SeedAsync()
        {
            if (await _context.Users.CountAsync() == 0)
            {
                var adminUser = new IdentityUser("admin");
                var nonadminUser = new IdentityUser("nonadmin");

                await _userManager.CreateAsync(adminUser, "PWD");
                await _userManager.CreateAsync(nonadminUser, "PWD");

                const string administratorRole = "Administrator";
                await _roleManager.CreateAsync(new IdentityRole(administratorRole));
                await _userManager.AddToRoleAsync(adminUser, administratorRole);
            }
        }
    }

Начальный код может быть запущен из Startup.cs из метода

 public void Configure(IApplicationBuilder app, 
                IHostingEnvironment env,
                ILoggerFactory loggerFactory,
                IEmailLoggerProvider emailLoggerProvider)
            { 
                 new SeedUser()
                         .SeedAsync()
                         .GetAwaiter()
                         .GetResult();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...