Я хочу иметь возможность генерировать запросы на стороне клиента, а затем отправлять их на сервер. Для обеспечения безопасности это мой подход:Генерировать запросы на стороне клиента
Каждый клиент связан с учетной записью. Таким образом, клиент должен будет отправить серверу идентификатор учетной записи и запрос.
После этого сервер получит идентификатор и запрос учетной записи. Затем сервер выполнит объединение всех таблиц и строк, относящихся к этой учетной записи.
После того, как сервер имеет все записи, относящиеся к этой учетной записи, в качестве утверждения объединения. Затем он выполнит запрос, отправленный клиентом, и выполнит этот запрос против объединения, а не всю базу данных.
Так что мой вопрос, как я могу отправить запрос LINQ к серверу? Например я хотел клиент, чтобы отправить:
// Id of Account QUERY
object[]{ "AfKX-3451-X4hT-...", myContext.Customers.Where(x=>x.Age>18) }
Второй параметр имеет тип IQueryable поэтому я не могу сериализовать :(
Если злоумышленник декомпилирует клиентское приложение и изменяет запросы, то он будет влиять только на его учетную запись, а не на всю базу данных.
У вас будет копия вашей модели EF на месте? –
Это звучит как плохая идея. Не только потому, что * любой * мог декомпилировать приложение, но главным образом потому, что он потянет всю бизнес-логику в клиента. Когда клиент может получать или сохранять только гранулированные данные, вряд ли может быть какая-либо бизнес-логика сервера/службы. Но, в любом случае, похоже, что OData будет намного лучшим вариантом для достижения этой цели (в зависимости от типа приложения, о котором вы говорите). Кроме того, если речь идет о многократном аренде, есть лучшие способы борьбы с этим в EF (например, схема для каждого арендатора). –