2017-02-12 50 views
6

我找到了this answer,但它似乎不适合我的ASP Net Core项目。如何将自定义角色添加到ASP.NET Core

事情我想明白了:

  • 我如何添加自定义角色。我甚至直接查看了我的MySQL数据库(表aspnetroles),但我不知道IdConcurrencyStamp使用什么。
  • 我在哪里放置代码以使这些新角色成为数据库的种子:Startup?在RegisterAccountController
  • 如何将这个新角色与用户绑定?我甚至看过表格,我不知道如何分配数据(没有user2roleaspnetusers.role_id)。

回答

12

您可以通过在启动类中创建CreateRoles方法轻松完成此操作。这有助于检查角色是否已创建,如果不是,则创建角色;在应用程序启动。像这样。

private async Task CreateRoles(IServiceProvider serviceProvider) 
    { 
     //adding customs roles : Question 1 
     var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>(); 
     var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>(); 
     string[] roleNames = { "Admin", "Manager", "Member" }; 
     IdentityResult roleResult; 

     foreach (var roleName in roleNames) 
     { 
      var roleExist = await RoleManager.RoleExistsAsync(roleName); 
      if (!roleExist) 
      { 
       //create the roles and seed them to the database: Question 2 
       roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName)); 
      } 
     } 

     //Here you could create a super user who will maintain the web app 
     var poweruser = new ApplicationUser 
     { 
      UserName = Configuration["AppSettings:UserName"], 
      Email = Configuration["AppSettings:UserEmail"], 
     }; 

     string userPWD = Configuration["AppSettings:UserPassword"]; 
     var _user = await UserManager.FindByEmailAsync(Configuration["AppSettings:AdminUserEmail"]); 

     if(_user == null) 
     { 
      var createPowerUser = await UserManager.CreateAsync(poweruser, userPWD); 
      if (createPowerUser.Succeeded) 
      { 
       //here we tie the new user to the role : Question 3 
       await UserManager.AddToRoleAsync(poweruser, "Admin"); 

      } 
     } 
    } 

,然后你可以调用从启动类的Configure方法await CreateRoles(serviceProvider);方法。 确保你有IServiceProvider作为Configure类中的参数

+0

看起来像它!我会尽量在回家时实现它,只要我在代码中测试它,我会将其标记为“已回答”。关于“我在哪里放置代码”:我认为我应该在'Startup.cs'的'Configure'方法的末尾调用它? –

+1

谢谢,泽维尔。是的,你可以在'Configure'方法的末尾调用它。在配置路由之后。 –

+9

就是这样,非常感谢。标记为已回答。简单点说一下,因为有些步骤对我来说不是微不足道的(以防它可以帮助其他人):为了从'Configure'方法的底部调用你的函数,我这样做了:'var serviceProvider = app.ApplicationServices.GetService (); CreateRoles(的ServiceProvider).Wait();'。 –

相关问题