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
的属性中,并动态添加处理安全性的查询部分。