gpt4 book ai didi

c# - 在 EF 中添加触发器

转载 作者:行者123 更新时间:2023-11-30 12:52:13 26 4
gpt4 key购买 nike

我正在为一些使用 c# 4.0 和 Entities Framework 的项目开发用户和权限模块。

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

  • 授予用户“John”管理特定部门员工的权限。

所以我想在 Entity Framework 中处理此权限并在执行之前对所有选择查询添加一些条件,换句话说,我需要在 Entity Framework 中添加诸如触发器之类的东西以在执行之前更改选择查询。

有没有办法在 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并动态添加处理安全性的查询部分。

关于c# - 在 EF 中添加触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5134096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com