2015-03-17 19 views
11

Tôi đang gặp sự cố khi tạo cơ sở dữ liệu của mình với người dùng và vai trò.Kiểm tra xem người dùng có trong vai trò trong asp.net mvc Identity

Người dùng và Vai trò đều được tạo (Tôi có thể thấy chúng trong cơ sở dữ liệu sau khi lỗi được ném).

Tuy nhiên, khi tôi cố gắng kiểm tra xem người dùng có ở trong vai trò hay không, tôi có ngoại lệ.

Mã của tôi là:

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

Tuy nhiên, trên dòng:

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

Một ngoại lệ được ném với lỗi: UserId not found.

Những thành viên và vai trò đều trong cơ sở dữ liệu khi tôi kiểm tra sau khi ngoại lệ được ném:

Shows User Added to DB

Shows Role Added to DB

bất cứ ai có thể nhìn thấy những gì tôi đang làm sai?

Nhờ sự giúp đỡ,

Đánh dấu

+0

Bạn đã thử 'SaveChanges()' trước 'if (! UserManager.IsInRole (" marktest "," Admin "))'? – Bruniasty

+0

Hi - vâng, tôi đã thêm 'context.SaveChanges();' - ngay trước dòng đó, nhưng vẫn ném một ngoại lệ với cùng một lỗi. Cảm ơn, Mark – Mark

+0

Người dùng "marktest" có được lưu trong cơ sở dữ liệu không? – Bruniasty

Trả lời

23

tôi phát hiện ra các giải pháp, trong trường hợp ai gặp vấn đề này.

Các "IsInRole" được mong đợi một User.Id - không phải là một chuỗi UserName - vì vậy tôi đã thay đổi để:

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

Vì vậy, các mã làm việc trở thành:

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


    } 

Tôi hy vọng rằng sẽ giúp,

Đánh dấu

+0

Mã của tôi trông giống nhau nhưng tôi vẫn nhận được UserId không tìm thấy trong cùng một vị trí –

4

Điều đơn giản nhất trong cuộc sống;

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

Vì một số lý do, điều này không làm việc cho tôi! Tôi đang sử dụng. Net Core với JWT Authentication. – Ciwan

+0

thử sử dụng @if (Roles.IsUserInRole (Model.UserName, "Administrator")) nếu nó hoạt động –

Các vấn đề liên quan