Весна: роли, полномочия и разрешения для сущностей - PullRequest
0 голосов
/ 27 мая 2020

Добрый день. Как я могу настроить разрешения и роли для пользователя относительно определенного c контроллера для указанного c объекта (что-то похожее на RBAC / ABA C) в одном приложении без использования разных сервисов OAUTH2?

Пример:

Приложение имеет глобальные роли ПОЛЬЗОВАТЕЛЯ: ROLE_USER, ROLE_ADMIN .

Также существует сущность с именем Project . USER может быть участником множества проектов. Есть несколько ролей ПОЛЬЗОВАТЕЛЯ проекта: PROJECT_ADMIN, PROJECT_EDITOR, PROJECT_USER . Каждая роль проекта может иметь свои собственные разрешения (полномочия), такие как добавление пользователя в проект, редактирование проекта и т. Д. Все конфигурации ролей хранятся в таблицах project_roles и project_permissions.

Как я понял, это можно реализовать с помощью аннотации PreAuthorize, но как можно сопоставить текущего глобального пользователя с ролью проекта?

@PreAuthorize("@projectService.hasPermission('create_project', #projectEditRequest.id)") // How to pass GlobalUserID?
@PostMapping
public ProjectDto create(@RequestBody @Validated ProjectEditRequest projectEditRequest) {
   ...
   ...
}

Может быть, есть примеры реализации такого случая?

Заранее спасибо!

Аналоговые вопросы:

Роли безопасности загрузки Spring на сущность

Роли, связанные с сущностями в Java Spring (без ответа)

1 Ответ

0 голосов
/ 28 мая 2020

Прежде всего, OAuth2 - неправильный способ сделать это вообще, поскольку вы говорите о мелкомасштабной авторизации на основе сущностей. Что-то подобное можно реализовать с помощью библиотеки, например Spring ACL . Тогда ваша модель авторизации обычно будет находиться в той же базе данных, что и ваши защищенные объекты, и Spring Security будет предоставлять запрошенные операции CRUD с помощью ACL (списка контроля доступа) и текущего контекста безопасности Spring (пользователя).

Из OAuth2 вы бы просто использовали субъект / пользователя в качестве владельца существующих записей ACL.

...