Фон:
У меня очень большая модель OData, которая в настоящее время использует службы данных WCF (OData), чтобы разоблачить ее. Однако Microsoft заявила, что службы данных WCF dead и что OData веб-API - это то, как они будут работать.
Итак, я изучаю способы использования OData Web API, а также служб данных WCF.
Настройка проблемы:
Некоторые части модели не нуждаются в защите, но некоторые делают. Например, список клиентов нуждается в безопасности, чтобы ограничить, кто может его прочитать, но у меня есть другие списки, такие как список продуктов, которые можно просмотреть.
Объект Customers имеет много ассоциаций, которые могут его достичь. Если вы считаете ассоциации уровня 2+, существует множество сотен способов, которыми клиенты могут быть достигнуты (через ассоциации). Например Prodcuts.First().Orders.First().Customer
. Поскольку клиенты являются ядром моей системы, вы можете начать с большинства объектов и в конечном итоге связать свой путь с списком клиентов.
У служб данных WCF есть возможность установить защиту для определенного объекта с помощью такого метода:
[QueryInterceptor("Customers")]
public Expression<Func<Customer, bool>> CheckCustomerAccess()
{
return DoesCurrentUserHaveAccessToCustomers();
}
Поскольку я смотрю на Web API OData, я не вижу ничего подобного. Плюс я очень обеспокоен тем, что контроллеры, которые я создаю, вроде бы не вызываются, когда ассоциация соблюдается. (Значение Я не могу установить безопасность в CustomersController
.)
Я беспокоюсь, что мне придется попытаться каким-то образом перечислить все способы, с помощью которых ассоциации могут каким-то образом обращаться к клиентам и устанавливать защиту для каждого из них.
Вопрос:
Есть ли способ установить безопасность для определенного объекта в OData веб-API? (Без необходимости перечислять все ассоциации, которые могут каким-то образом расширяться до этого объекта?)