2017-12-29 63 views
0

역할을 기반으로 내 컨텍스트를 동적으로 권한 부여하는 방법을 파악하려고합니다.Db 일반 리소스 권한

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

내 문제는 내 쿼리 가능 항목을 적용한 후에 어떻게이 항목을 기본 쿼리 가능하게 만들 수 있습니까?

나는 이전 DbSet here

작동하는 gyst을 발견하지만 닷넷 코어

가 어떻게 정의 dbset를 만들 수 있습니다, 또는 어떻게 기존 dbSet를 필터링 할 수 있습니다 IDBSet를 포함하지 않는 이유는 무엇입니까? global filters을 통해 더 나은 방법이있다

+0

@SlavaUtesinov가 여전히 절약과 협력이 –

답변

1

:

public class AuthorizationContext : DbContext 
{ 
    static AuthorizationContext() 
    { 
     QueryFilterManager.Filter<Orders>(q => q.Where(x => x.Price <= 5000)); 
    } 

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

내가 필요로 설정 필터링하는 간단한 방법이 있어야합니다 같은 느낌 변경 추적기 등을 연결하는 것입니다 내 컨텍스트를 사용하여이 항목을 기본적으로 필터링합니다. 따라서 개발자는 컨텍스트를 필터링하는 것을 기억할 필요가 없습니다. 하지만 정상적으로 작동 할 수도 있습니다. 1 –

+0

이 경우, _global filters_을 사용하면 업데이트 된 답변을 볼 수 있습니다. –

+0

감사합니다. 오늘 밤에 조사하겠습니다. 여분의 종속성을 포함하는 것을 선호하지만이 방법이 작동하면 작동합니다. 이 경우 오늘 밤에 올바른 표시를 할 것입니다. –