2017-01-29 14 views
1

Я использую последнюю версию Spring Data Rest (SDR) и Spring Security (SS) и имеют следующие объекты:Spring остальные данные и пользовательские представления

  • Пользователь: содержит список команд присоединился и другой для командами.
  • Команда: содержит список для членов и другой для администраторов.

Что я хотел бы сделать, это настроить информацию, возвращаемую объектами по SDR, предоставленным разрешениям текущего пользователя. Мне известно о проекциях в SDR, но я считаю, что они не подходят для моей текущей проблемы, так как это должно быть сделано прозрачно без указания пользователем проекции в запросе.

Учитывая следующее:

(1) /teams/{team_id}/members 
(2) /teams/{team_id}/members/{member_id} 
(3) /users/{user_id}/teamsJoined 

Вот что я хочу реализовать:

  • Посещение (1) нормальным членом команды будет возвращать разные поля, чем когда сделано администратором ,
  • Посещения (2) возвращают дополнительные поля не возвращенные (1)
  • Посещения (3):
    • пользователя с {user_id} должен вернуть все команды.
    • другим членом должен возвращаться только пересечение их команд.

Я думал о том, может быть, с помощью АОП, но я не совсем уверен, если это будет работать. Какой был бы лучший способ реализовать это?

+0

Вы можете посмотреть на программное применение проекции, а не на его прохождение. См. Эту тему для идей: http://stackoverflow.com/questions/40289665/spring-data-rest-projection-representation-of-single- ресурс/40291003 # 40291003 –

ответ

0

Я не уверен, что раскрытие различных представлений о ресурсе (в том же ури) на основе запрашивающего пользователя следует философии REST. Вы должны использовать для этого другой uri.

Возможно, вы могли бы разделить данные, видимые только некоторыми пользователями из первоначальной сущности, в другую «сущность» (отношение 1-1) и ограничить доступ к конечным точкам связанных с ними данных. Вы можете использовать аннотации @PreAuthorize и @PostFilter в своих методах репозитория, чтобы ограничить доступ к вашим ресурсам на основе идентифицированного пользователя.