Net Core Identity одна роль на пользователя - PullRequest
1 голос
/ 24 февраля 2020

Я хочу иметь только один MyIdentityRole на MyIdentityUser. Мой текущий код:

public class MyIdentityUser: IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Image { get; set; }
    public string PersonalNumber { get; set; }
    public string Address { get; set; }
    public bool IsDeleted { get; set; }
    public string MyIdentityRoleId { get; set; }
    public MyIdentityRole MyIdentityRole { get; set; }
}

public class MyIdentityRole: IdentityRole
{
    public List<MyIdentityUser> MyIdentityUsers { get; set; }
    public List<MenuPermission> MenuPermissions { get; set; }
}

Код контроллера:

private readonly UserManager<MyIdentityUser> _UserManager;
public AdminSideMenuViewComponent(IMenuService menuService, UserManager<MyIdentityUser> userManager)
{
  this._MenuService = menuService;
  this._UserManager = userManager;
}
public async Task<IViewComponentResult> InvokeAsync()
{
  var user = await _UserManager.GetUserAsync(HttpContext.User);
  var role = user?.MyIdentityRole; // is always null
  var roleId = user?.MyIdentityRoleId; // returns actual roleId as it should
}

Небольшая проблема в том, что когда я получаю пользователя с RoleManager, все заполнено правильно, но свойство навигации MyIdentityRole в MyIdentityUser всегда NULL , хотя MyIdentityRoleId показывает правильный идентификатор роли. В базе данных [dbo].[AspNetUsers] есть внешний ключ MyIdentityRoleId, сгенерированный при первой миграции кода.

Я что-то не так делаю?

1 Ответ

1 голос
/ 25 февраля 2020

но свойство навигации MyIdentityRole в MyIdentityUser всегда равно NULL, хотя MyIdentityRoleId показывает правильный идентификатор роли.

Попробуйте:

var username = HttpContext.User.Identity.Name;
var user = await _userManager.Users.Include(u => u.MyIdentityRole)
                                   .Where(u => u.UserName == username).FirstOrDefaultAsync();
var roles = user?.MyIdentityRole; 
var roleId = user?.MyIdentityRoleId;

Результат: enter image description here Еще один простой способ:

var role = User.FindAll(c => string.Equals(c.Type, ClaimTypes.Role)).First().Value;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...