Как я могу сохранить иерархический класс полномочий в классе лиц?

Мой вопрос: (Как?) я могу сохранить свои "права" для моего пользователя в классе пользователя в Grails с помощью Spring Security Plugin?

Я дал следующую структуру SQL:

Таблица пользователей:

...
varchar(255): username
...
int(2) rank: (refers to Rank table)

Таблица рейтинга:

int(11): id
varchar(25): rank_name

Могу ли я настроить свои доменные классы для работы с этой структурой вместо типичной схемы "пользователь, администрация, пользователь и администратор, многие ко многим"?

Ранг (id) является иерархическим, то есть пользователь с рангом 4 получил все "полномочия" от пользователя с рангом 3 и т. Д.

РЕДАКТИРОВАТЬ: я просто заменил в пользовательском домене, метод getAuthorities следующим:

Set<Permission> getAuthorities() {
    Authority.findAllById(this.rank)
    // instead of: UserAuthority.findAllByUser(this)*.permission
}

1 ответ

Решение

Посмотрите на GormUserDetailsService, чтобы увидеть, как загружаются авторы. Там есть authoritiesPropertyName конфигурация для ядра Springsecurity, которая задает имя свойства домена пользователя, который должен возвращать права доступа, значение по умолчанию - "полномочия" - вы можете изменить это, чтобы вернуть права доступа на основе модели вашего домена.

Если это не удовлетворяет вашим требованиям, то вы также можете создать службу пользовательских данных.

И переопределить исходный сервис данных пользователя, определив бин с именем userDetailsService в вашем conf/spring/resources.groovy

Другие вопросы по тегам