добавить триггеры в EF - PullRequest
       2

добавить триггеры в EF

4 голосов
/ 27 февраля 2011

Я работаю над модулем пользователей и разрешений для некоторых проектов, использующих c # 4.0 и Entities Framework.

и в предлагаемом сценарии я должен предоставить пользователям разрешения на такие данные, как:

  • дать пользователю разрешение на управление пользователем "Джон" для сотрудников в конкретном отделе.

, поэтому я решил обработать это разрешение в Entity Framework и добавить некоторые условия ко всем запросам выбора перед его выполнением, другими словамиМне нужно добавить что-то вроде триггера в структуре сущностей, чтобы изменить запрос выбора перед его выполнением.

Есть ли способ сделать это в рамках сущности?

1 Ответ

1 голос
/ 27 февраля 2011

Вы можете добавить несколько условий к 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> в методы, которые будут изменять запрос.Я считаю, что должно быть даже возможно добавить Interception (аспекты) непосредственно к свойствам, выставляющим ObjectSet, и динамически добавлять части запросов, связанные с безопасностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...