2

나머지 API 프레임 워크를 작성 중이므로 db 인증 컨텍스트를 만들고 싶습니다. 컨텍스트는 역할 해결자를 받아 기본 집합을 필터링하는 데 사용합니다. 규칙 집합을 기반으로합니다. 내 첫 번째 시도에서EF 코어에서 Db 리소스 권한 부여

나는 기업은 특정 자원

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; 
    } 
} 

에 대한 액세스를 금지하는 설정하지만 난 filteredDBSet에 다시 내 Queryable을 변환 할 수 없기 때문에이 I를 컴파일되지 않습니다에 어쩌면 내가 기본 필터를 적용 할 수 있다고 생각.

EF-Core에서 Secure data의 여러 가지 기사를 몇 가지 발견했지만이 방법을 사용하려면 데이터 보호 방법이 필요하지 않습니다.

  1. 나는 나의 상황이 암시 적으로 안전한 데이터 역할 을 기반으로 할 (컨텍스트를 사용하여 모든 사용자 권한 부여를 확인하기 위해 약 wraping 자신의 쿼리를 걱정하지 않도록.)
  2. 추가의 많은 사용자를위한 구성

SQL의 메타 데이터를 기반으로 이미 내 표현식을 생성하는 함수가 있습니다. 내 문제가 DBSet에 필터링 적용 대상입니다.

Expression<TEntity, Bool>이라고 가정하면 사용자가 내가 결정한 데이터에만 액세스하거나 수정할 수 있도록 내 컨텍스트를 보호 할 수 있습니까?

+0

EFC 2.0 [전역 쿼리 필터] (https://docs.microsoft.com/en-us/ef/core/querying/filters) –

+0

당신은 Entityframework plus의 것들을 언급하고 있습니까? 그 사람들이 ef7에서 작동하지 않는다고 생각 했나요? –

+0

아니요, 링크에서 보시다시피, 이것들은 EF 코어의 일부입니다. –

답변

2

Expression<TEntity, bool>은 EF 코어 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 파생 클래스를 근간으로하는 몇 가지 제한 사항과 특수 요구 사항이 있습니다. 나는 그들이 시간이 지남에 개선 될 것이라고 확신하지만, 현재 기능이 당신의 필요를 충족시킬 수 있는지 확인하는 것이 좋다.