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