Справочная информация:
У меня очень большая модель OData, которая в настоящее время использует службы данных WCF (OData) для ее раскрытия. Однако Microsoft заявила, что WCF Data Services - это dead, и этот веб-API OData - это то, как они будут работать.
Поэтому я изучаю способы заставить работать OData веб-API, а также службы данных WCF.
Устранение проблемы:
Некоторые части модели не нужно защищать, но некоторые нужно. Например, список клиентов нуждается в защите, чтобы ограничить круг лиц, которые могут его читать, но у меня есть другие списки, такие как список продуктов, которые может просматривать любой.
У организации «Клиенты» есть множество ассоциаций, с которыми она может связаться. Если вы посчитаете ассоциации уровня 2+, то сможете найти множество сотен способов связаться с клиентами (через ассоциации). Например Prodcuts.First().Orders.First().Customer
. Поскольку клиенты являются ядром моей системы, вы можете начать с любого объекта и в конечном итоге связать свой путь со списком клиентов.
В WCF Data Services есть способ установить безопасность для определенного объекта с помощью такого метода:
[QueryInterceptor("Customers")]
public Expression<Func<Customer, bool>> CheckCustomerAccess()
{
return DoesCurrentUserHaveAccessToCustomers();
}
Когда я смотрю на OData веб-API, я не вижу ничего подобного. Кроме того, я очень обеспокоен, потому что контроллеры, которые я делаю, не вызывают, когда отслеживается ассоциация. (Это означает, что я не могу поставить безопасность в CustomersController
.)
Меня беспокоит, что мне придется попытаться как-то перечислить все способы, которыми ассоциации могут каким-то образом добраться до клиентов и обеспечить безопасность каждого из них.
Вопрос:
Есть ли способ установить безопасность для определенного объекта в OData веб-API? (Без необходимости перечислять все ассоциации, которые могут каким-либо образом расшириться до этого организация?)
QueryInterceptor
должен по-прежнему работать со службами OData. Если вы установите точку останова, попадет ли ваш код в QueryInterceptor? - person Rots   schedule 30.07.2014QueryInterceptor
на этой странице: msdn.microsoft.com/en-us/data /gg192996.aspx. Возможно, не для OData веб-API? - person Rots   schedule 31.07.2014