2

Для жизни я не могу понять, как просто добавлять роли в мое приложение MVC 5. Это был такой ветер в MVC 4.Использовать роли в ASP.NET MVC 5 Identity 2.0

Таблицы есть из коробки, AspNetRoles, который имеет идентификатор и имя («Администратор», «Пользователь», и т.д ...) AspNetUsers, который имеет Id и другие поля пользователя AspNetUserRoles - эта таблица имеет UserId и RoleId, которая сопоставляется с таблицами выше.

Я хочу, чтобы у меня была возможность проверить, имеет ли подписанный пользователь роль «admin» или просто «пользовательская» роль.

Вот что я пробовал:

if (User.IsInRole("Admin")) 
{ 
//do something 
} 

Значение всегда возвращается ложью.

Я также попытался:

var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); 
var userRole = UserManager.GetRoles(user.GetUserId()); 
if (userRole[0] == "Admin") 
    { 
    // do something 
    } 

Это проливает ошибка: «Индекс был вне диапазона Должно быть неотрицательным и меньше, чем размер коллекции.»

Есть ли простой способ, который может получить роль для текущего зарегистрированного пользователя? Я видел ссылки на использование Role Manager, но мне не удалось заставить это работать. Я считаю, что было для Идентичность 1.0

Благодаря

+0

Пользователь не оставил комментария. Я использую UserManager для проверки: http://stackoverflow.com/questions/23049813/asp-net-identity-2-0-check-if-current-user-is-in-role-isinrole –

ответ

3

ошибка говорит вам, что userRole пуст, так как даже с индексом 0, не «меньше, чем размер коллекции». Это означает, что пользователь, о котором идет речь, не принадлежит к каким-либо ролям.

Методология для этого действительно не сильно отличается от того, что когда-либо было. Роль должна существовать, во-первых, и пользователь должен быть связан с этой ролью. В результате, первый шаг, чтобы заполнить свои роли:

db.Roles.Add(new Role { Name = "Admin" }); 

Вы можете использовать RoleManager для этого, но я считаю, что это перебор, когда вы можете просто использовать контекст непосредственно.

Тогда:

UserManager.AddToRole(userId, "Admin"); 

Это буквально все есть на него. Если вам нравится, вы можете переопределить Seed в Migrations\Configuration.cs, чтобы засеять некоторые пользователи/роли в базе данных автоматически. Для ролей это выглядело бы так:

context.Roles.AddOrUpdate(
    r => r.Name, 
    new Role { Name = "Admin" }, 
    ... 
); 
+0

Да, я видел это , У меня был пустой стол. Мой вопрос: как вы проверяете свою роль? У меня есть (User.IsInRole («Admin»), и это всегда неверно. Спасибо –

+0

qq: предполагая локальный sqlserver с localdb, и вы открываете идентификатор db, вы видите, что у вас есть какие-либо данные? Я столкнулся с проблемой где я пытался посеять базу данных, создавая пользователей, я не проверял IdentityResult, который всегда был ошибкой, и, следовательно, мой db был легким. – Bill

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

  • Нет связанных вопросов^_^