2013-10-23 6 views
5

Ich habe eine neue MVC-Anwendung in der neuen VS2013 IDE erstellt. Ich habe folgendes auf die Anmeldung Aktion auf der Account als ich dynamisch einen Standard-Benutzer erstellen wollte:Rolle dynamisch in neuer Benutzeridentität von VS 2013 hinzufügen UserManager

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

Dies funktioniert gut, ich wollte dann in eine neue Standardrolle dieses Standardbenutzer setzen:

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

Die zweite Zeile Fehler, weil offensichtlich nicht die Rolle "admin" finden kann, da es noch nicht existiert, aber ich kann keine relevante Methode auf dem UserManager finden, dies zu tun. Wo finde ich die Methode zum dynamischen Hinzufügen von Rollen?

Antwort

15

Hier ist, wie ich es gemacht habe. Ich habe ein Wörterbuch userRoles mit preauthorized {Benutzername, Rolle} Schlüssel - Wert-Paare:

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

Perfekt danke. Es war der RoleManager, den ich brauchte. Definiert Rollen auf Controllern jetzt anders? – user1166905

+0

Gern geschehen, user1166905. Das Erstellen einer Rolle ist ziemlich einfach, sie wird in der Zeile "var roleResult = rm.Create (new IdentityRole (item.Value))" angezeigt; – Ungaro

+0

Danke ich meinte, sie auf Controllern zu definieren, d. H. [Authorize (Roles = "admin")] aber bereits getestet und ist das gleiche. – user1166905

Verwandte Themen