如何获取用户在 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); 但它只是将角色的名称作为字符串返回。这对我没有帮助,因为我需要角色的 idnamedescription

我怎样才能进行类似的调用但收到 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,因为没有明显的方法可以通过来自 UserManagerUserStore 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 如何让用户在注册时选择自己的角色?

在jsp页面中如何获取到当前登录用户的角色id

从用户 MVC 5 中删除所有角色

我如何传递从另一个模型获取的角色数组以在 laravel 中注册表单

Laravel 5 new auth:获取当前用户以及如何实现角色?