2013-10-23 15 views
5

Ho creato una nuova applicazione MVC nel nuovo IDE VS2013. Ho aggiunto quanto segue per l'azione di login sul AccountController come ho voluto creare un utente di default in modo dinamico:Aggiunta di ruolo dinamicamente nel nuovo UserManager di Identità VS 2013

var admin = new ApplicationUser() { UserName = "administrator" }; 
var result = UserManager.Create(admin, "administrator"); 

Questa grande opera, allora ho voluto mettere questo utente predefinito in un nuovo ruolo predefinito:

user = UserManager.FindByName("administrator"); 
var roleresult = UserManager.AddToRole(user.Id,"admin"); 

Gli errori di seconda riga perché ovviamente non è possibile trovare il ruolo "admin" poiché non esiste ancora, ma non riesco a trovare un metodo rilevante su UserManager per farlo. Dove posso trovare il metodo per aggiungere ruoli dinamicamente?

risposta

15

Ecco come l'ho fatto. Ho un dizionario UserRoles con chiave preauthorized {userName, role} - coppie di valori:

private void setRoles() 
{ 
    using(var rm = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()))) 
    using(var um = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()))) 
     foreach (var item in userRoles) 
     { 
      if (!rm.RoleExists(item.Value)) 
      { 
       var roleResult = rm.Create(new IdentityRole(item.Value)); 
       if (!roleResult.Succeeded) 
        throw new ApplicationException("Creating role " + item.Value + "failed with error(s): " + roleResult.Errors); 
      } 
      var user = um.FindByName(item.Key); 
      if (!um.IsInRole(user.Id, item.Value)) 
      { 
       var userResult = um.AddToRole(user.Id, item.Value); 
       if (!userResult.Succeeded) 
        throw new ApplicationException("Adding user '" + item.Key + "' to '" + item.Value + "' role failed with error(s): " + userResult.Errors); 
      } 
     } 
} 
+0

Perfetto grazie. Era il RoleManager di cui avevo bisogno. La definizione dei ruoli nei controller è diversa ora? – user1166905

+0

Siete i benvenuti, user1166905. La creazione di un ruolo è abbastanza semplice, viene mostrata sulla riga "var roleResult = rm.Create (new IdentityRole (item.Value));" – Ungaro

+0

Grazie per averli definiti su Controllers, ad esempio [Authorize (Roles = "admin")] ma già testato ed è lo stesso. – user1166905