Мы разрабатываем приложение (с использованием Grails Spring Security (ранее Acegi)), в котором у нас будут тысячи пользователей, охватывающих 10-15 дискретных типов пользователей. В текущей системе каждый тип пользователя соответствует «группе», а определенные роли и разрешения привязаны к группе. Пользователь получает все свои «роли» из группы.
Например, у нас может быть две группы пользователей:
CLOWN: role = ride_clown_car, toot_horn, receive_applause
АКРОБАТ: role = do_flip, walk_tightrope, receive_applause
У нас есть три пользователя, один из которых назначен группе CLOWN, один назначен группе ACROBAT, а другой назначен обоим (имеет объединение ролей CLOWN и ACROBAT).
Если мы меняем права, мы делаем это на уровне группы. Например, если мы добавим разрешение swing_on_trapeze к группе ACROBAT, все акробаты будут автоматически наследовать его.
В терминах Grails разрешения для контроллеров по-прежнему будут на уровне ролей. Таким образом, действие с @Secured (['toot_horn']) позволит пользователям в группе CLOWN, но не в группе ACROBAT. @Secured (['receive_applause']) разрешит и КЛОНЫ, и АКРОБАТЫ.
Как бы я сделал это в Spring Security, учитывая двухуровневый характер модели (пользователь, роль)? Нужно ли мне реализовывать свою собственную аутентификацию для сбора ролей на основе групп?
Спасибо!