Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数据库通用资源授权_C#_Entity Framework_Authorization_.net Core_Filtering - Fatal编程技术网

C# 数据库通用资源授权

C# 数据库通用资源授权,c#,entity-framework,authorization,.net-core,filtering,C#,Entity Framework,Authorization,.net Core,Filtering,我正试图找出如何基于角色动态授权我的上下文 public interface IConstraintResolver { Expression<Func<TEntity, bool>>[] GetConstraintsForTypeByRole<TEntity>() where TEntity : class; } public class AuthorizationContext : DbContext { protecte

我正试图找出如何基于角色动态授权我的上下文

public interface IConstraintResolver
{
    Expression<Func<TEntity, bool>>[] GetConstraintsForTypeByRole<TEntity>() 
        where TEntity : class;
}
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;
    }
}
公共接口IConstraintResolver
{
表达式[]GetConstraintsForTypeByRole()
其中tenty:类;
}
公共类AuthorizationContext:DbContext
{
受保护的IConstraintResolver\u constraintResolver;
公共授权上下文(IConstraintResolver constraintResolver)
{
这是。_constraintResolver=constraintResolver;
}
公共覆盖数据库集()
{
var defaultSet=base.Set();
var constraints=this.\u constraintResolver.GetConstraintsForTypeByRole();
var filteredSet=base.Set().AsQueryable();
foreach(约束中的var约束)
{
filteredSet=filteredSet.Where(约束);
}
//如何将其应用回innerQueryable
返回过滤器设置;
}
}
我的问题是,在应用我的可查询性之后,如何将其设置为集合的默认可查询性

我发现了一个与旧DbSet一起工作的gyst

但是.Net核心不包含IDBSet


如何创建自定义数据库集,或者如何筛选现有数据库集?

有更好的方法,可以通过:

公共类授权上下文:DbContext
{
静态授权上下文()
{

QueryFilterManager.Filter(q=>q.Where(x=>x.Price@SlavaUtesinov)这仍然适用于保存和连接到更改跟踪器等。我觉得应该有一种简单的方法来过滤此集合。默认情况下,我需要我的上下文来过滤此集合。因此开发人员不需要记住过滤上下文。但通常情况下,这可能会起作用,再加上1确定,在这种情况下,您可以使用global filters,看看更新后的答案。谢谢,我今晚会调查这个问题。我更喜欢包含一个额外的依赖项,但如果这项工作有效,我今晚会将其标记为正确。我通常倾向于自己写东西,但这个库将为我节省大量时间,谢谢!
public class AuthorizationContext : DbContext
{
    static AuthorizationContext()
    {
         QueryFilterManager.Filter<Orders>(q => q.Where(x => x.Price <= 5000));
    }

    public AuthorizationContext()
    {
         QueryFilterManager.InitilizeGlobalFilter(this);
    }
}