2016-07-07 21 views
0

Ich habe folgende Methode verwendet, um zwei Rollen und zwei Benutzer zu erstellen, wenn meine Webanwendung gestartet wird (In Application_Start() in Global.asax.cs). Die Administratorrolle wird jedoch erstellt, aber nicht die Benutzerrolle. Ähnliches passiert für den Benutzer [email protected] und den Benutzer namens [email protected] Der erste wird erstellt, aber nicht der zweite.Wie erstellt man Rolle und Benutzer in der ASP.Net-Identität?

Hier ist mein Code.

void create() { 
    ApplicationDbContext context = new ApplicationDbContext(); 
    IdentityResult IdRoleResult; 
    IdentityResult IdUserResult; 

    var roleStore = new RoleStore<IdentityRole>(context); 
    var roleMngr = new RoleManager<IdentityRole>(roleStore); 
    if (!roleMngr.RoleExists("Administrator")) 
     IdRoleResult = roleMngr.Create(new IdentityRole("Administrator")); 

    roleStore = new RoleStore<IdentityRole>(context); 
    roleMngr = new RoleManager<IdentityRole>(roleStore); 
    if (!roleMngr.RoleExists("User")) 
     IdRoleResult = roleMngr.Create(new IdentityRole("User")); 

    var userMngr = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); 
    var appUser = new ApplicationUser() { UserName = "[email protected]" }; 
    IdUserResult = userMngr.Create(appUser, "pa$$word"); 
    if (IdUserResult.Succeeded) 
     IdRoleResult = userMngr.AddToRole(appUser.Id, "Administrator"); 

    userMngr = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); 
    appUser = new ApplicationUser() { UserName = "[email protected]" }; 
    IdUserResult = userMngr.Create(appUser, "user"); 
    if (IdUserResult.Succeeded) 
     IdRoleResult = userMngr.AddToRole(appUser.Id, "User"); 
} 

Kann mir jemand sagen, was ich falsch gemacht habe oder eine alternative Möglichkeit, dies durchzuführen. Vielen Dank im Voraus.

Aktualisiert Code:

void createAdmin() { 
    ApplicationDbContext context = new ApplicationDbContext(); 
    IdentityResult IdRoleResult; 
    IdentityResult IdUserResult; 

    var roleStore = new RoleStore<IdentityRole>(context); 
    var roleMngr = new RoleManager<IdentityRole>(roleStore); 

    if (!roleMngr.RoleExists("Administrator")) { 
     IdRoleResult = roleMngr.Create(new IdentityRole("Administrator")); 
     if (!IdRoleResult.Succeeded) 
      throw new Exception("Administrator role wasnt created."); 
    } 

    if (!roleMngr.RoleExists("User")) { 
     IdRoleResult = roleMngr.Create(new IdentityRole("User")); 
     if (!IdRoleResult.Succeeded) 
      throw new Exception("User role wasnt created."); 
    } 

    var userMngr = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); 
    ApplicationUser appUser; 

    var q = from user in userMngr.Users 
      where user.UserName == "[email protected]" 
      select user; 
    if (q.Count() == 0) { 
     appUser = new ApplicationUser() { UserName = "[email protected]" }; 
     IdUserResult = userMngr.Create(appUser, "pa$$word"); 
     if (IdUserResult.Succeeded) { 
      IdRoleResult = userMngr.AddToRole(appUser.Id, "Administrator"); 
      if (!IdRoleResult.Succeeded) 
       throw new Exception("Admin user wasn't added to Administrator role."); 
     } else 
      throw new Exception("Admin user wasn't created."); 
    } 

    q = from user in userMngr.Users 
     where user.UserName == "[email protected]" 
     select user; 
    if (q.Count() == 0) { 
     appUser = new ApplicationUser() { UserName = "[email protected]" }; 
     IdUserResult = userMngr.Create(appUser, "user"); 
     if (IdUserResult.Succeeded) { 
      IdRoleResult = userMngr.AddToRole(appUser.Id, "User"); 
      if (!IdRoleResult.Succeeded) 
       throw new Exception("User user wasn't added to User role."); 
     } else 
      throw new Exception("User user wasn't created."); 
    } 
} 

Hier fand ich, dass, wird der Code Ausnahme mit der Meldung zu werfen „Benutzer Benutzer wurde nicht erstellt.“

+1

Also, was ist der Wert von 'IdRoleResult' in dem Fall, in dem die 'Benutzer'-Rolle nicht erstellt werden kann? Sie müssen sich diese Rückgabewerte ansehen, um festzustellen, was passiert. – spender

+0

Warum erstellen Sie für jede Operation neue Instanzen des Typs "RoleStore" und "RoleManager"? Diese können wiederverwendet werden. Gleiches mit 'UserManager'. – spender

+1

Ich würde ernsthaft vermeiden, Code wie 'if (IdUserResult.Succeeded) IdRoleResult = userMngr.AddToRole (appUser.Id," Administrator ");'. Stattdessen bevorzuge ich eine 'switch' Anweisung, wobei der Standardfall eine 'ArgumentOutOfRangeException' auslöst. Auf diese Weise versagen die Dinge niemals still. – mason

Antwort

0
throw new Exception("User user wasn't created."); 

Ich denke, Sie sollten Fehler in Objekt Ergebnis 'IdUserResult', und legen Sie Benutzer mit der Funktion CreateAsync() lesen.