Добавляем панель администрирования пользователей и управляем правами доступа пользователей с помощью аннотации 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