c# – 在EF中添加触发器

我正在使用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的属性并动态添加处理安全性的查询部分.

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...