2015-03-17 5 views
11

У меня возникла проблема с посещением моей базы данных пользователями и ролями.Проверка наличия пользователя в роли asp.net mvc Удостоверение

Созданы оба пользователя и роль (я могу видеть их в базе данных после того, как была выбрана ошибка).

Однако, когда я пытаюсь проверить, является ли пользователь в роли, я получаю исключение.

Мой код:

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

Однако, на линии:

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

Исключение брошено с ошибкой: UserId not found.

пользователем и роль являются как в базе данных, когда я проверяю после исключения:

Shows User Added to DB

Shows Role Added to DB

Может кто-нибудь увидеть, что я делаю неправильно?

Спасибо за любую помощь,

Марк

+0

Вы пробовали 'SaveChanges()' before' if (! UserManager.IsInRole ("marktest", "Admin")) '? – Bruniasty

+0

Привет - да, я добавил 'context.SaveChanges();' - как раз перед этой строкой, но все равно выбрасывает исключение с той же ошибкой. Спасибо, Mark – Mark

+0

Является ли пользователь «marktest», сохраненный в базе данных? – Bruniasty

ответ

23

Я узнал решение, в случае, если кто-то еще испытывает эту проблему.

"IsInRole" ожидает user.id - не UserName строку - так я изменил:

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

Так рабочий код становится:

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


    } 

Я надеюсь, что помогает,

Mark

+0

Мой код выглядит одинаково, но я все равно получаю UserId не найденным там же –

4

Простенькая вещь в жизни;

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

По какой-то причине это не работает для меня! Я использую .Net Core с аутентификацией JWT. – Ciwan

+0

попробуйте использовать @if (Roles.IsUserInRole (Model.UserName, «Администратор»)), если он работает –

Смежные вопросы