Я автор статті, про яку йде мова.
Без сумніву, існує кілька способів зробити це, але я зазвичай це роблю, це реалізувати спеціальний, UserDetails
який знає про ролі та дозволи. Role
і Permission
це лише власні класи, які ви пишете. (Нічого химерного - не Role
має імені, і набору Permission
примірників, і Permission
має ім’я.) Потім getAuthorities()
повертаються GrantedAuthority
об’єкти, які виглядають так:
PERM_CREATE_POST
, PERM_UPDATE_POST
,PERM_READ_POST
замість повернення таких речей, як
ROLE_USER
, ROLE_MODERATOR
Ролі все ще доступні, якщо у вашій UserDetails
реалізації є getRoles()
метод. (Я рекомендую його мати.)
В ідеалі ви призначаєте ролі користувачеві, і відповідні дозволи заповнюються автоматично. Сюди входило б користувальницьке вміння, UserDetailsService
яке знає, як виконати це зіставлення, і все, що йому потрібно зробити, - це джерело відображення з бази даних. (См. Статтю для схеми.)
Тоді ви можете визначити свої правила авторизації з точки зору дозволів, а не ролей.
Сподіваюся, що це допомагає.