4
我正在處理用戶和權限模塊,用於使用c#4.0和Entities Framework的一些項目。在EF中添加觸發器
,並在提出的方案中,我必須給像數據用戶權限:
- 給予用戶在特定部門的員工「約翰」的管理權限。
,所以我認爲,以處理實體框架此權限,並添加所有選擇查詢條件,一些之前執行它,換句話說,我需要添加像在實體框架觸發出頭改變選擇查詢之前執行它。
有沒有辦法在實體框架中做到這一點?
我正在處理用戶和權限模塊,用於使用c#4.0和Entities Framework的一些項目。在EF中添加觸發器
,並在提出的方案中,我必須給像數據用戶權限:
,所以我認爲,以處理實體框架此權限,並添加所有選擇查詢條件,一些之前執行它,換句話說,我需要添加像在實體框架觸發出頭改變選擇查詢之前執行它。
有沒有辦法在實體框架中做到這一點?
您可以動態添加多個條件到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
的屬性中,並動態添加處理安全性的查詢部分。