Net Core Identity 每个用户一个角色
Net Core Identity one role per user
我想每个 MyIdentityUser
只有一个 MyIdentityRole
。我当前的代码:
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
的用户时,一切都正确填写,但是
MyIdentityUser
中的导航 属性 MyIdentityRole
始终是 NULL 尽管 MyIdentityRoleId
显示正确的角色 ID。
在数据库 [dbo].[AspNetUsers]
中有一个由 codefirst 迁移生成的外键 MyIdentityRoleId
。
我是不是做错了什么?
but navigation property MyIdentityRole in MyIdentityUser is always NULL though MyIdentityRoleId shows correct role Id.
试试这个:
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;
结果:
另一个简单的方法:
var role = User.FindAll(c => string.Equals(c.Type, ClaimTypes.Role)).First().Value;
我想每个 MyIdentityUser
只有一个 MyIdentityRole
。我当前的代码:
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
的用户时,一切都正确填写,但是
MyIdentityUser
中的导航 属性 MyIdentityRole
始终是 NULL 尽管 MyIdentityRoleId
显示正确的角色 ID。
在数据库 [dbo].[AspNetUsers]
中有一个由 codefirst 迁移生成的外键 MyIdentityRoleId
。
我是不是做错了什么?
but navigation property MyIdentityRole in MyIdentityUser is always NULL though MyIdentityRoleId shows correct role Id.
试试这个:
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;
结果:
var role = User.FindAll(c => string.Equals(c.Type, ClaimTypes.Role)).First().Value;