2011-02-27 42 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看起來像:

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

這只是一個例子,其中PrincipalPermission不允許調用GetManagedEmployees非管理者的角色和AddDepartmentPermission增加查詢部分只允許從允許的部門選拔員工。

重點是你可以把IQueryable<T>換成修改查詢的方法。我相信應該甚至可以將攔截(方面)直接添加到暴露ObjectSet的屬性中,並動態添加處理安全性的查詢部分。