동적으로 IQueryable
에 여러 조건을 추가 할 수 있습니다. 그래서 당신은 같은 것을 수행 할 수 있습니다
[PrincipalPermission(SecurityAction.Demand, Role="DepartmentManager")]
public IEnumerable<Employee> GetManagedEmployees()
{
// build base query
var query = from e in context.Employees
select e;
// add condition
query = AddDepartmentPermissions(query);
return query.AsEnumerable();
}
을 그리고처럼 AddDepartmentPermissions
모양을 :이 PrincipalPermission
비 관리자 역할에 대한 GetManagedEmployees
및 AddDepartmentPermission
를 호출 허용하지 않는 경우 단지 예입니다
private IQueryable<Employee> AddDepartmentPermission(IQueryable<Employee> query)
{
int departmentId = GetAllowedDepartmentSomewhere();
return query.Where(e => e.Department.Id == departmentId);
}
쿼리 부분을 추가 허용 된 부서의 직원 만 선택할 수 있습니다.
요점은 IQueryable<T>
을 쿼리를 수정할 수있는 방법으로 줄 수 있다는 것입니다. ObjectSet
을 노출하는 속성에 가로 채기 (aspect)를 직접 추가하고 보안을 처리하는 쿼리 부분을 동적으로 추가하는 것이 가능해야한다고 생각합니다.