查找具有特定角色的用户

Posted

技术标签:

【中文标题】查找具有特定角色的用户【英文标题】:Find users who have a specific role 【发布时间】:2017-11-02 05:52:56 【问题描述】:

我的代码是:

public async Task<ActionResult> Index()

    var teaching = db.Teachings.Include(d =>d.Course).Include(d=>d.Group).Include(d => d.User);

    return View(await teaching.ToListAsync());

我想知道如何过滤某些角色,我的意思是,如果可以的话,如何仅过滤具有特定角色的用户。

我认为可能的解决方案是....Include(d =&gt; d.Users).Where(...),但我不知道如何将我所扮演的用户角色与特定角色进行比较。

我的角色是教师、管理员或学生。

总之,只过滤角色为“老师”的用户。

【问题讨论】:

您需要在问题中包含表定义,包括它们之间的关系,而不是胡乱猜测。 我认为你应该检查你的模型。教师、学生和管理员之间存在逻辑差异。我认为您应该创建一个学生表和一个教师表。管理员实际上是一个角色,对您的模型没有任何意义。然后,您可以在 IdentityContext 中保持授权,同时您可以通过加入学生表(或教师表)来查询“教学”。 这是一个大学项目,我不能修改我的数据库表。我的老师将我们的教师、学生和管理员添加为一个角色,我无法改变这一点,我必须用它来管理自己。 @RuardvanElburg 【参考方案1】:

你可以写一个linq给你做,选择所有与用户相关联的任何角色等于teacher的老师,这样写,供你参考

var teaching = db.Teachings
                    .Include(d =>d.Course)
                    .Include(d=>d.Group)
                    .Include(d => d.User)
                    .Include(d => d.User.Roles)
                    .Where(d => d.User.Roles.Any(r => r.Name == "teacher")));

【讨论】:

【参考方案2】:

一个简单的方法是使用 Identity 的 UserManager 类。它有一个返回布尔值的 UserInRole 函数。您可以做的是遍历用户并检查此功能。

示例:

foreach(var user in Users)

    var isInRole = UserManager.UserInRole(user, "RoleName");

【讨论】:

虽然我同意您应该使用 Usermanager,但遍历用户并不是解决方案,因为这意味着您必须先获取用户,然后为每个用户调用数据库以获取角色。最好使用一个函数来扩展 UserManager,该函数的功能类似于名称所示:GetUsersInRoleAsync【参考方案3】:

假设您使用的是 ASP.net 提供的 Identity Framework,您可以使用 UserManager 来实现。

在 UserManager 中,它有一个函数供您使用,即 GetUsersInRoleAsync(string roleName)。这将为您返回角色中的用户列表。

你可以这样做

var userThatYouWant = await _userManager.GetUsersInRoleAsync("RoleName");

瞧,该列表将包含具有您指定角色的所有用户。

这是假设您已正确初始化 _userManager。

【讨论】:

问题未标记为 asp.net-core【参考方案4】:

也许你可以试试: db.Teachings.Include(d =>d.Course).Include(d=>d.Group).Include(d => d.User.Where(us=> ur.Role =="teacher"));

我希望这会有所帮助!

【讨论】:

以上是关于查找具有特定角色的用户的主要内容,如果未能解决你的问题,请参考以下文章

查找具有特定 spring 安全角色的用户

查找存在特定用户及其角色的所有数据库

Laravel Eloquent - 返回具有特定角色的用户(多对多关系)

Discord.js,通过数组中的 ID 查找用户是不是具有角色

查找具有匹配角色标准的 Discord 用户

查找具有特定权限的文件