在C#Linq中过滤基于角色的用户

时间:2019-05-23 09:24:51

标签: c# .net linq entity-framework-6 iqueryable

我们在系统中具有多个角色,并且用户可以分配有多个角色 一切都是自定义的。我们没有使用身份识别。

我正在以一些角色(例如“来宾”,“管理员”)发送api请求。 Api应该只返回具有这些角色的用户

这就是我过滤用户的方式 List<string> roles->这是一个具有角色名称的变量 来自前端的应该是“管理员”

roles =“ admin”->但可以具有更多角色

UserRoleMappings是导航属性,其中包含用户ID和 角色ID组合以保存特定用户的角色

现在在吸引所有用户的同时,我希望对其进行过滤,以便

query.Where(user => user.UserRoleMappings.Any(urm => roles.Contains(urm.UserRole.Name)));

此查询正在获取具有“ admin” +“ guests”角色的用户 应用包含。但是我需要仅具有“管理员”角色的用户

因为

user

1  user1
2 user2

role
1 admin
2 guest

userMapping
1 1
1 2
2 1

Api应该只返回user2,但同时也返回user1。该方法应该是通用的,并且可以用于多个角色

感谢与问候

2 个答案:

答案 0 :(得分:0)

您必须使用select和Where, query.Select(用户=> user.UserRoleMappings.where(urm =>角色。包含(urm.UserRole.Name)))。toList();

现在您的where子句将仅返回匹配元素

答案 1 :(得分:0)

如果您需要仅具有管理员角色而没有其他角色的用户

var adminUsers = query
    .Where(user => user.UserRoleMappings.All(urm => urm.UserRole.Name == "admin"));

因为如果他们的所有“角色”都被命名为“ admin”,那肯定是他们唯一的角色。