2015-03-17 7 views
11

Ich habe ein Problem beim Seeding meiner Datenbank mit Benutzern und Rollen.Überprüfen, ob ein Benutzer in einer Rolle in asp.net mvc ist Identität

Der Benutzer und die Rolle werden beide erstellt (ich kann sie in der Datenbank sehen, nachdem der Fehler ausgelöst wurde).

Wenn ich jedoch versuche zu überprüfen, ob der Benutzer in einer Rolle ist, bekomme ich eine Ausnahme.

Mein Code ist:

public class tbInitializer<T> : DropCreateDatabaseAlways<tbContext> 
    { 
    protected override void Seed(tbContext context) 
    { 
     ApplicationDbContext userscontext = new ApplicationDbContext(); 
     var userStore = new UserStore<ApplicationUser>(userscontext); 
     var userManager = new UserManager<ApplicationUser>(userStore); 

     var roleStore = new RoleStore<IdentityRole>(userscontext); 
     var roleManager = new RoleManager<IdentityRole>(roleStore); 


     if(!userscontext.Users.Any(x=> x.UserName=="marktest")) 
     { 
      var user = new ApplicationUser { UserName = "marktest", Email = "[email protected]" }; 
      userManager.Create(user, "Pa$$W0rD!"); 
     } 

     if (!roleManager.RoleExists("Admin")) 
     { 
      roleManager.Create(new IdentityRole("Admin")); 
     } 

     if(!userManager.IsInRole("marktest","Admin")) 
     { 
      userManager.AddToRole("marktest","Admin"); 
     } 

jedoch auf der Linie:

if(!userManager.IsInRole("marktest","Admin"))

Eine Ausnahme mit dem Fehler ausgelöst: UserId not found.

Die User und die Rolle sind beide in der Datenbank, wenn ich überprüfe, nachdem die Ausnahme ausgelöst wird:

Shows User Added to DB

Shows Role Added to DB

Kann jemand sehen, was ich falsch mache?

Vielen Dank für jede Hilfe,

Mark

+0

Haben Sie 'SaveChanges()' vor 'if (! UserManager.IsInRole (" marktest "," Admin "))'? – Bruniasty

+0

Hi - Ja, ich habe 'context.SaveChanges();' - kurz vor dieser Zeile hinzugefügt, aber es gibt immer noch eine Ausnahme mit dem gleichen Fehler. Danke, Mark – Mark

+0

Ist "marktest" Benutzer dann in einer Datenbank gespeichert? – Bruniasty

Antwort

23

ich die Lösung fand heraus, falls jemand dieses Problem hat.

Die "IsInRole" ist ein User.Id erwarten - kein Username string - also habe ich zu:

  if (!userManager.IsInRole(user.Id, "Admin")) 
      { 
       userManager.AddToRole(user.Id, "Admin"); 
      } 

So ist der Arbeits Code wird:

ApplicationDbContext userscontext = new ApplicationDbContext(); 
    var userStore = new UserStore<ApplicationUser>(userscontext); 
    var userManager = new UserManager<ApplicationUser>(userStore); 

    var roleStore = new RoleStore<IdentityRole>(userscontext); 
    var roleManager = new RoleManager<IdentityRole>(roleStore); 

    // Create Role 
    if (!roleManager.RoleExists("Admin")) 
    { 
     roleManager.Create(new IdentityRole("Admin")); 
    } 

    if(!userscontext.Users.Any(x=> x.UserName=="marktest")) 
    { 
     // Create User 
     var user = new ApplicationUser { UserName = "marktest", Email = "[email protected]" }; 
     userManager.Create(user, "Pa$$W0rD!"); 

     // Add User To Role 
     if (!userManager.IsInRole(user.Id, "Admin")) 
      { 
       userManager.AddToRole(user.Id, "Admin"); 
      } 


    } 

Ich hoffe, das hilft,

Mark

+0

Mein Code sieht gleich aus, aber ich bekomme immer noch die UserId nicht an der gleichen Stelle –

4

Einfachste Sache im Leben;

bool isAdmin= User.IsInRole("admin") 
+0

Aus irgendeinem Grund funktioniert das nicht für mich! Ich verwende .Net Core mit JWT-Authentifizierung. – Ciwan

+0

versuchen Sie es mit @if (Roles.IsUserInRole (Model.UserName, "Administrator")), wenn es funktioniert –

Verwandte Themen