Найти тему
letsCode

Spring Boot Security: добавляем панель администратора и роли пользователей, ограничиваем доступ

Добавляем панель администрирования пользователей и управляем правами доступа пользователей с помощью аннотации hasAuthority из Spring Security.

Код из видео:

https://github.com/drucoder/sweater/tree/hasAuthority

В самом начале нам нужно добавить новую роль в список ролей (enum Role) и страницу, отображающую список пользователей нашего приложения. Для этого создадим новый шаблон для списка пользователей. Используем в нем удобный синтаксис для отображения списков через разделитель.

Синтаксис этой директивы описан тут:

https://freemarker.apache.org/docs/ref_directive_list.html#ref_list_sep

Далее добавим ссылку на эту страницу с главной страницы приложения main.ftl. Следующим этапом добавляем шаблон для редактирования пользователя, где доступными для редактирования сделаны поля username и roles (доступный в виде списка чекбоксов).

В редакторе пользователя для вывода ролей используем функции seq_contains:

https://freemarker.apache.org/docs/ref_builtins_sequence.html#ref_builtin_seq_contains

После этого создаем новый контроллер UserController и прописываем в нем эндпойнты для отображения списка пользователей, формы редактирования пользователя и обработки изменённых данных пользователя.

Теперь для любого авторизованного пользователя доступен список всех пользователей и возможность изменения их имени и списка ролей. Значит следующим логичным шагом будет ограничение прав. После добавления одному из пользователей роли ADMIN добавляем на UserController аннотацию

@PreAuthorize("hasAuthority('ADMIN')")

Которая ограничит доступ к панели администратора и оставит его только для пользователей с ролью ADMIN. Но эта аннотация не будет работать до добавления конфигурационной аннотации на класс конфигурации WebSecurityConfig

@EnableGlobalMethodSecurity(prePostEnabled = true)

Документация по Freemarker:

https://freemarker.apache.org/docs/index.html

Документация по языку выражений Spring Security, определяющих доступ

https://docs.spring.io/spring-security/site/docs/current/reference/html/el-access.html

Канал в Telegram: https://t.me/letsCode_dru

Чат в Telegram: https://t.me/joinchat/FeiP9xEhqHajfqhLr4z-Nw

Ссылка на плейлист: https://www.youtube.com/playlist?list=PLU2ftbIeotGpAYRP9Iv2KLIwK36-o_qYk

Ссылка на канал: https://www.youtube.com/channel/UC1g3kT0ZcSXt4_ZyJOshKJQ