【问题标题】:Db Resource Authorization in EF CoreEF Core 中的 Db 资源授权
【发布时间】: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 的不同方法的文章,但使用这种方法需要,不是我想要保护我的数据的方式。

  1. 我希望我的上下文根据角色隐式保护数据 (这样任何使用上下文的用户都不必担心 包装他们的查询以检查授权。)
  2. 为用户提供大量额外配置

我有一个函数,它已经根据 SQL 的元数据生成了我的表达式。我的问题是申请过滤到DBSets。

假设您获得了 Expression&lt;TEntity, Bool&gt; 我如何保护我的上下文,以便用户只能访问或修改我决定的数据?

【问题讨论】:

  • EFC 2.0 怎么样global query filters
  • 你指的是Entityframework plus中的那些吗?我认为这些不适用于 ef7?
  • 不,从链接中可以看出,这些是 EF Core 的一部分。
  • 谢谢 没看到那个链接!
  • 如果您发布答案,它们看起来会起作用我会标记它是正确的,当我完成任何一种方式时,我都会发布我的工作代码

标签: c# entity-framework entity-framework-core asp.net-core-2.0


【解决方案1】:

Expression&lt;TEntity, bool&gt; 听起来很适合 EF Core 2.0 Global Query Filter

您可以为特定实体设置它:

modelBuilder.Entity<SomeEntity>().HasQueryFilter(expression);

或基于某些标准的多个实体 - 例如 EF-Core 2.0 Filter all queries (trying to achieve soft delete)ef core 2 apply HasQueryFilter for all entity

请注意,当前全局查询过滤器有一些限制和特殊要求,如果它们需要动态等(EF Core: Soft delete with shadow properties and query filters),则必须植根于DbContext 派生类。我很确定它们会随着时间的推移而得到改进,但最好检查一下当前的功能是否能满足您的需求。

【讨论】:

    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2023-03-25
    • 2013-09-22
    • 2021-08-31
    • 2012-11-18
    相关资源
    最近更新 更多