Sping Boot REST: фильтрация результатов в зависимости от роли пользователя - PullRequest
0 голосов
/ 12 октября 2018

Я создаю бэкэнд отдыха с аутентификацией и различными ролями.Теперь проблема в том, что мне нравится фильтровать, результат зависит от роли пользователя.

Я не реализовал контроллер сам, вместо этого я использую PagingAndSortingRepository Inferface, это работает довольно хорошо.Я ищу что-то похожее на этот python-django метод .

Решение должно соответствовать шаблону REST.

Чтобы сделать это более понятным, вот exmaple :

Допустим, у меня есть два пользователя, пользователь A является обычным пользователем с ролью «пользователь».Пользователь B является администратором с ролью «admin».

Существует таблица базы данных, в которой хранятся userData.Таблица выглядит следующим образом.

| ID | username | name | email |

Они оба отправляют простой аутентифицированный GET запрос на /userData.

Теперь мой бэкэнд обнаруживает на основев заголовке authentication пользователей и добавьте роли.

Теперь, в зависимости от роли, пользователь A должен получить только ответ, содержащий его персональные данные, а пользователь B должен получить все доступные данные, хотя /userData.

Ответ для пользователя A:

{
   "res":[
      {
         "id":1,
         "username":"userA",
         "name":"A",
         "email":"userA@mail.com"
      }
   ]
}

Ответ для пользователя B:

{
   "res":[
      {
         "id":1,
         "username":"userA",
         "name":"A",
         "email":"userA@mail.com"
      },
      {
         "id":2,
         "username":"userB",
         "name":"B",
         "email":"userB@mail.com"
      },
      {
         "id":3,
         "username":"userC",
         "name":"C",
         "email":"userC@mail.com"
      }
   ]
}

1 Ответ

0 голосов
/ 12 октября 2018

Я создал расширение для Spring-Data-Jpa, которое может удовлетворить такие требования (и многое другое). spring-data-jpa-acl

Вы можете настроить правила по ролям или ассоциациям с помощью нескольких простых аннотаций, и на все методы data-jpa и конечные точки REST будут влиять эти правила,Расширение добавляет дополнительные спецификации к запросам JPA, поэтому вся фильтрация будет выполняться на стороне БД, поэтому вы даже сможете использовать нумерацию страниц для отфильтрованных данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...