【问题标题】: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

标签: c# asp.net-mvc asp.net-identity user-roles


【解决方案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"));

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2012-10-26
      • 2012-07-06
      • 2010-12-22
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 2017-09-10
      • 2015-09-09
      相关资源
      最近更新 更多