2011-02-27 3 views
4

저는 C# 4.0 및 Entities Framework를 사용하는 일부 프로젝트의 사용자 및 권한 모듈에 대해 작업하고 있습니다.EF에서 트리거를 추가하십시오.

  • 주고 사용자가 특정 부서 직원에 대한 "존"관리 권한 :

    및 제안 된 시나리오에서

    , 난 등의 데이터에 대한 사용자 권한을 부여해야합니다.

그래서 다른 말로하면 나는 그것을 실행하기 전에 선택 쿼리를 변경하는 엔티티 프레임 워크 트리거 같은 일도을 추가 할 필요가 전에 그것을 실행하는 엔티티 프레임 워크에서이 권한을 처리하고 모든 선택 쿼리에 대한 몇 가지 조건을 추가 할 생각.

엔티티 프레임 워크에서이를 수행 할 수있는 방법이 있습니까?

답변

1

동적으로 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 비 관리자 역할에 대한 GetManagedEmployeesAddDepartmentPermission를 호출 허용하지 않는 경우 단지 예입니다

private IQueryable<Employee> AddDepartmentPermission(IQueryable<Employee> query) 
{ 
    int departmentId = GetAllowedDepartmentSomewhere(); 
    return query.Where(e => e.Department.Id == departmentId); 
} 

쿼리 부분을 추가 허용 된 부서의 직원 만 선택할 수 있습니다.

요점은 IQueryable<T>을 쿼리를 수정할 수있는 방법으로 줄 수 있다는 것입니다. ObjectSet을 노출하는 속성에 가로 채기 (aspect)를 직접 추가하고 보안을 처리하는 쿼리 부분을 동적으로 추가하는 것이 가능해야한다고 생각합니다.

관련 문제