加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在EF中添加触发器

发布时间:2020-12-15 21:16:02 所属栏目:百科 来源:网络整理
导读:我正在使用c#4.0和Entities Framework处理一些项目的用户和权限模块. 在提议的场景中,我必须授予用户以下数据的权限: 为特定部门的员工授予用户“John”管理权限. 所以我想在Entity Framework中处理这个权限,并在执行之前在所有选择查询中添加一些条件,换句
我正在使用c#4.0和Entities Framework处理一些项目的用户和权限模块.

在提议的场景中,我必须授予用户以下数据的权限:

>为特定部门的员工授予用户“John”管理权限.

所以我想在Entity Framework中处理这个权限,并在执行之前在所有选择查询中添加一些条件,换句话说,我需要在执行它之前添加像实体框架中的触发器之类的东西来改变选择查询.

在实体框架中有没有办法做到这一点?

解决方法

您可以动态地向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的属性并动态添加处理安全性的查询部分.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读