我们在系统中具有多个角色,并且用户可以分配有多个角色 一切都是自定义的。我们没有使用身份识别。
我正在以一些角色(例如“来宾”,“管理员”)发送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。该方法应该是通用的,并且可以用于多个角色
感谢与问候
答案 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”,那肯定是他们唯一的角色。