查找具有特定角色的用户
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 => 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"));
我希望这会有所帮助!
【讨论】:
以上是关于查找具有特定角色的用户的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Eloquent - 返回具有特定角色的用户(多对多关系)