asp.net-core – 获取具有指定角色的用户
使用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;} 并自由地使用它… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-core – 将应用程序root路由到/ swagger
- asp.net-mvc-3 – 显示modelstate错误
- asp.net-mvc – 如何在ASP.NET MVC控制器中设置十进制分隔符
- asp.net-mvc-2 – 如何使用Castle Windsor在MVC中注入UrlHe
- ASP.NET Response.Redirect使用302而不是301
- 身份验证 – 在达到会话和身份验证票证超时值之前,用户被迫
- asp.net-core – .NET Core 2中缺少TaskCache类
- asp.net-mvc – 实体类型没有键定义 – 代码优先
- 初识ABP vNext(5):ABP扩展实体
- 阻止ASP.NET MVC调用模型类中的所有getter
- asp.net-mvc – 实体框架 – 无法创建x类型的常量
- asp.net-mvc – 为什么我的HttpConfiguration类型
- 写单元测试在ASP.NET Web API中使用User.Identit
- 配置 – ASP.NET Core Expose配置到DI注入服务
- 实体框架 – EF6 DBContext动态连接字符串
- 如何杀死会话或会话ID(ASP.NET/C)
- asp.net-mvc – 我是否需要在Login操作上使用Val
- .net – 将GUID转换为整数和后退
- asp.net-mvc – ASP.NET Web API比ASP.NET MVC有
- asp.net – 通过GET访问Mvc Web API复杂对象查询