LINQ to SQL перехватчик запросов
-
22-07-2019 - |
Вопрос
Я смотрю на реализацию некоторых LINQ to SQL, но изо всех сил пытаюсь понять, как мы добавим бизнес-правила управления доступом, например, клиент может просматривать только свои заказы. В службах данных ado.net запросчики выполняют именно то, что мне нужно, и могут видеть, как проверить обновление / вставку / удаление, но есть ли эквивалент этого:
[QueryInterceptor("Orders")]
public IQueryable<Orders> OnQueryOrders(IQueryable<Orders> orderQuery)
{
return from o in orderQuery
where o.Customers.ContactName == HttpContext.Current.User.Identity.Name
select o;
}
Или мне нужно управлять через аксессоры по линии: GetOrdersByCustomer (строка customerId)
Решение
Я думаю, что в этом случае лучшим решением будет создание настоящего бизнес-уровня, который находится между прикладным уровнем и вашими классами LINQ to SQL.
Затем вы запросите свой бизнес-уровень, который, в свою очередь, реализует всю вашу бизнес-логику и фильтрацию. Если правильно спроектировать, этот бизнес-уровень может быть достаточно прозрачным для любого, кто кодирует прикладной уровень, и тогда все будут счастливы.