我有一个简单的安全模型:
- 用户
- 角色
- 路径
以及这些表之间的多对多链接,因此用户到角色,角色到路径。我正在尝试编写一个函数,以便根据用户名和路径返回一个 bool 值,该值基于用户是否有权访问该路径。我如何使用 Entity Framework 来做到这一点?我目前有:
var rolesForUser = _entities.Users
.Include("Roles")
.Where(u => u.Login.Equals(username))
.Select(u => u.Roles);
if(rolesForUser.Count() == 0) return false;
var authentications = _entities.WebPaths
.Where(p => p.Path == path)
.WhereIn(p => p.Roles, rolesForUser);
return (authentications.Count() > 0);
它使用扩展方法 WhereIn ,但是这只能在原始动物上进行比较,所以目前还行不通。欢迎提出任何建议。
最佳答案
你或许可以用 PredicateBuilder 做到这一点.
在我的脑海中:
var predicate = PredicateBuilder.False<WebPath>();
foreach (var role in from roles in rolesForUser
from r in roles.Role
select r)
{
predicate = predicate.Or (p => p.roles.Any(r => r.Id == role.Id));
}
var authentications = _entities.WebPaths.AsExpandable()
.Where(p => p.Path == path)
.Where(predicate);
return (authentications.Count() > 0);
关于c# - Entity Framework 多个多对多查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1999785/