加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – 获取具有指定角色的用户

发布时间:2020-12-15 22:31:14 所属栏目:asp.Net 来源:网络整理
导读:使用ASP.NET Core身份,我使用UserManager.CreateAsync()创建一个新用户,并使用UserManager.AddToRoleAsync将它们分配给现有角色.这是有效的,因为用户和角色之间的实现存储在数据库的AspNetUserRoles表中. 但是当我使用UserManager(例如UserManager.FindByMai
使用ASP.NET Core身份,我使用UserManager.CreateAsync()创建一个新用户,并使用UserManager.AddToRoleAsync将它们分配给现有角色.这是有效的,因为用户和角色之间的实现存储在数据库的AspNetUserRoles表中.

但是当我使用UserManager(例如UserManager.FindByMail()方法)获取用户时,角色列表为空.我也尝试过EF的Include功能:

var user = userManager.Users.Include(u => u.Roles).FirstOrDefault(u => u.Email == "test@test.de");

这给了我n:m关联表的ID,因为我需要角色名称,所以它不是很有用.也不可能使用第二个查询加载它们,因为身份用户的Roles属性是只读的.我希望得到一个List< string>角色名称.找不到任何关于此的信息.

对我来说,唯一的解决方法似乎是向我的用户添加一个自定义属性,并用数据填充它们,我使用第二个查询获取数据.但那不是一个好的解决方案.不能相信ASP.NET Core Identity没有更好的方法来获取这些数据……

解决方法

默认情况下,UserManager不会加载关系.

手动包含是一种很好的方法,但如here所述 – EntityFramework Core尚不支持直接M:N关系.

所以我看到两种方式:

(优先的)使用

userManager.GetRolesAsync(user);

这将返回List< string>使用用户的角色名称.或者使用一些EF查询通过加入IdentityUserRole获取IdentityRole对象.不幸的是,这需要接受事实,角色不会直接在用户实体中.

或者你可以实现自定义IdentityUserRole,在那里创建与IdentityRole的关系,然后用`查询它

Include(user => user.Roles).ThenInclude(role => role.Role)

例如,如何实现自己的身份实体. here.但它是复杂的方法,而且Role对象将嵌套在绑定实体中.

但是,您可以在ApplicationUser中声明属性:

[NotMapped]
public List<string> RoleNames {get; set;}

并自由地使用它…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读