【发布时间】:2017-12-30 18:03:16
【问题描述】:
我正在编写一个 Rest API 框架,我想创建一个数据库授权上下文。 上下文接受一个角色解析器并使用它来过滤默认集。基于一组规则。
在我的第一次尝试中,我想也许我可以将默认过滤器应用于实体集以禁止访问某些资源
public class AuthorizationContext : DbContext
{
protected IConstraintResolver _constraintResolver;
public AuthorizationContext(IConstraintResolver constraintResolver)
{
this._constraintResolver = constraintResolver;
}
public override DbSet<TEntity> Set<TEntity>()
{
var defaultSet = base.Set<TEntity>();
var constraints = this._constraintResolver.GetConstraintsForTypeByRole<TEntity>();
var filteredSet = base.Set<TEntity>().AsQueryable();
foreach (var constraint in constraints)
{
filteredSet = filteredSet.Where(constraint);
}
//how do I apply this back to the innerQueryable
return filteredSet;
}
}
但这并不能编译 I,因为我无法将我的 Queryable 转换回 filteredDBSet。
我在 EF-Core 中找到了几篇关于 Secure data 的不同方法的文章,但使用这种方法需要,不是我想要保护我的数据的方式。
- 我希望我的上下文根据角色隐式保护数据 (这样任何使用上下文的用户都不必担心 包装他们的查询以检查授权。)
- 为用户提供大量额外配置
我有一个函数,它已经根据 SQL 的元数据生成了我的表达式。我的问题是申请过滤到DBSets。
假设您获得了 Expression<TEntity, Bool> 我如何保护我的上下文,以便用户只能访问或修改我决定的数据?
【问题讨论】:
-
EFC 2.0 怎么样global query filters
-
你指的是Entityframework plus中的那些吗?我认为这些不适用于 ef7?
-
不,从链接中可以看出,这些是 EF Core 的一部分。
-
谢谢 没看到那个链接!
-
如果您发布答案,它们看起来会起作用我会标记它是正确的,当我完成任何一种方式时,我都会发布我的工作代码
标签: c# entity-framework entity-framework-core asp.net-core-2.0