asp.net-core - 获取分配角色的用户

标签 asp.net-core asp.net-identity asp.net-core-mvc asp.net-core-1.0

使用 ASP.NET Core 身份,我使用 UserManager.CreateAsync() 创建了一个新用户并使用 UserManager.AddToRoleAsync 将它们分配给现有角色.这是可行的,因为用户和角色之间的关系存储在 AspNetUserRoles 中。数据库的表。

但是当我使用 UserManager 获取用户时(例如 UserManager.FindByMail() 方法)然后 Role列表为空。我也试过Include EF的功能如下:

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 查询来获得 IdentityRole通过加入 IdentityUserRole 的对象。不幸的是,这需要接受角色不会直接在用户实体中的事实。

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

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

描述了如何实现自己的身份实体,例如here .但它的方法很复杂,Role对象将嵌套在绑定(bind)实体中。

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

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

并随意使用它...

关于asp.net-core - 获取分配角色的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39946711/

相关文章:

visual-studio-2015 - 当添加一个带有 "Add as Link"的现有项目时,这个文件不是在 VS2015 中编译的?

git - 在 Bitbucket 管道中增加一个数字

asp.net-core - 即使在搭建所有身份页面后也找不到身份的 Layout.cshtml 文件

c# - 使用内置的 ASP.NET Core Web 服务器构建 .NET Core 控制台应用程序?

angular - 我可以使用 IdentityServer4 spa JS UI 而不是 asp .net core mvc 吗?

asp.net-core - dnu 发布,进程无法访问该文件

c# - ASP.NET Core 2.0 - 部署到 IIS

ASP.NET Identity - 保护目录免受未经身份验证的用户的攻击

c# - Visual Studio 2015 ASP.NET 身份与 Web 窗体(不是 ASP.NET MVC)

authentication - 在我的 Web 应用程序 Controller 中每次 API 调用时请求访问 token 是否正确?