2017-02-12 26 views
6
için özel roller ekleme

this answer yüklüyorum ama ASP Net Core projemde uygun görünmüyor.ASP.NET Core

şeyler anlamaya çalışıyorum:

  • Nasıl özel bir rol ekleyebilir. Doğrudan MySQL veritabanına baktım (tablo aspnetroles), ancak Id ve ConcurrencyStamp olarak ne kullanacağımı bilmiyorum.
  • Veritabanını bu yeni rollerle tohumlamak için kodu nereye koyarım: Startup? AccountController altında Register?
  • Bu yeni rolü bir kullanıcıya nasıl bağlarım? Tabloları inceledim ve verileri nasıl atacağımı bilmiyorum (user2role veya aspnetusers.role_id var).

cevap

12

Başlangıç ​​sınıfınızda bir CreateRoles yöntemi oluşturarak bunu kolayca yapabilirsiniz. Bu, rollerin oluşturulup oluşturulmadığını kontrol eder ve eğer değillerse rolleri oluşturur; uygulama başlangıcında. Öyle olsun.

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"); 

      } 
     } 
    } 

ve sonra Başlangıç ​​sınıfında Configure yönteminden await CreateRoles(serviceProvider); yöntemini diyebiliriz. Configure sınıfında bir parametre olarak IServiceProvider olduğundan emin olunuz

+0

Buna benziyor! Eve geldiğimde bunu uygulamaya çalışacağım, kodumda test ettiğim anda "cevaplandı" olarak işaretleyeceğim. Hakkında "Kodu nereye koyacağım": "Startup.cs" içindeki 'Configure' yönteminin sonunda çağırmam gerektiğini varsayalım? –

+1

Teşekkürler, Xavier. Evet, 'Configure' yönteminin sonunda bunu çağırabilirsiniz. Rotaları yapılandırdıktan hemen sonra. –

+9

O kadardı, çok teşekkür ederim. Cevaplandı olarak işaretlemek. Kısa bir not, çünkü benim için önemsiz olan bazı adımlar olduğundan (bir başkasına yardımcı olabilirse): 'Configure' yönteminin altından işlevinizi çağırmak için şunu yaptım:' var serviceProvider = app.ApplicationServices.GetService (); CreateRoles (ServiceProvider) .Wait(); '. –