2017-02-12 59 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();'。 –

相關問題