3

Используя идентификатор пользователя ASP.NET MVC5, я пытаюсь отобразить имена ролей IdentityUser.Как получить имена ролей IdentityUser в представлении?

Похоже, что у пользователя Identity есть свойство Roles, которое представляет собой набор IdentityUserRole, а не IdentityRole. Отличие состоит в IdentityUserRole представляет ассоциацию между IdentityUser и IdentityRole, в то время как IdentityRole является фактической Role моделью [+]. По-видимому, между IdentityUser и IdentityRole нет навигации. Итак, все, что мы получаем, это RoleId от IdentityUserRole.

  1. Есть ли простой способ получить имена ролей?
  2. Используя Fluent API, мы можем определить свойство виртуальной навигации между IdentityRole и IdentityUserRole, чтобы получить имя легко по всему проекту?
  3. Если это по дизайну, в чем преимущество, не позволяя нам получить IdentityRole прямо?
+0

Я хотел бы предложить вам получить роли в контроллере/действии и передать его в представление как свойство, то есть часть модели, которую вы передаете для просмотра. Если нет, вам может потребоваться расширить свойства IPrincipal или IIdentity для включения ролей, тогда вы можете получить что-то вроде HttpContext.Current.User.Identity.Roles. – DSR

+1

Я предполагаю, что вы нашли ответ на этот вопрос, хотя здесь ничего нет, поэтому я хотел бы знать, что это такое. На этом этапе я храню словарное представление объектов IdentityRole в ViewBag и обращается к ним с помощью IdentityUserRole.RoleId в коде представления. Это работает, но я не в восторге от этого. –

ответ

-1

Вы можете выбрать UserRole в идентичности с помощью rolemanager

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(this.dbcontext)); 

от пользователя получить UserRole, а затем выберите имя из этой роли

roleManager.FindById(user.RoleId).Name 
Смежные вопросы