如何获取用户在 MVC 5 中注册的角色的 ID
Posted
技术标签:
【中文标题】如何获取用户在 MVC 5 中注册的角色的 ID【英文标题】:How to get the ID of Roles for which a user is enrolled in MVC 5 【发布时间】:2014-02-28 00:12:36 【问题描述】:我正在尝试获取用户当前注册的角色的IList<ApplicationRole>
。
现在在 Usermanager 类中,我看到有一个函数调用 IList<String> usersRoles = userManager.GetRoles(id);
但它只是将角色的名称作为字符串返回。这对我没有帮助,因为我需要角色的 id
、name
和 description
。
我怎样才能进行类似的调用但收到 applicationRole 而不是字符串?
这是我的模型:
public class ApplicationRole : IdentityRole
[Display(Name = "Description")]
[StringLength(100, MinimumLength = 5)]
public string Description get; set;
【问题讨论】:
【参考方案1】:你可以试试这个来获取 ApplicationRoles 的列表。
List<string> roleNames = UserManager.GetRoles(userId).ToList();
List<ApplicationRole> roles = RoleManager.Roles.Where(r => roleNames.Contains(r.Name)).ToList();
【讨论】:
【参考方案2】:我认为您正在寻找RoleManager
。它在形式和功能上与 UserManager
非常相似,但专门用于具有角色的 CRUD。
var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
其中context
是您的DbContext
的一个实例。
那么,你可以这样做:
var role = await RoleManager.FindByIdAsync(roleId);
或者
var role = await RoleManager.FindByNameAsync(roleName);
【讨论】:
【参考方案3】:我认为您需要为它查询 ApplicationDbContext,因为没有明显的方法可以通过来自 UserManager
或 UserStore
API 的单个调用来获取它...
var context = new ApplicationDbContext();
var roles = await context.Users
.Where(u => u.Id == userId)
.SelectMany(u => u.Roles)
.Join(context.Roles, ur => ur.RoleId, r => r.Id, (ur, r) => r)
.ToListAsync();
【讨论】:
以上是关于如何获取用户在 MVC 5 中注册的角色的 ID的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET MVC 5 中列出具有角色名称的用户
ASP.NET Core 3.1 MVC 如何让用户在注册时选择自己的角色?