Имеет ли Spring Security свойство hasAllRole, которое выполняет AND-версию hasAnyRole - PullRequest
0 голосов
/ 01 ноября 2011

Я использую Spring Security в Grails, чтобы ограничить доступ к моим контроллерам.У меня есть случай, когда я хочу проверить, что пользователю назначено несколько ролей.Я понимаю, что мог бы просто сделать еще одну роль, которая синонимична «у человека есть эти две роли», но это потребовало бы гораздо большего количества изменений, чем я хотел бы.

Spring Security имеет версию ИЛИ выражение , чтобы проверить, есть ли у пользователя какой-либо из списка ролей:

//allow user to access if he has role ROLE_ADMIN -OR- ROLE_USER
//note this is shortcut notation for hasAnyRole(["ROLE_ADMIN","ROLE_USER"])
@Secured(["ROLE_ADMIN","ROLE_USER"])
def index = {}

Есть ли метод или просто способ использования Язык выражений Spring (SpEL) для выполнения следующих действий:

//allow user to access if he has role ROLE_ADMIN -AND- ROLE_USER
@Secured("hasAllRole(['ROLE_ADMIN','ROLE_USER']")
def index = {}

Примечание. Класс SpringSecurityUtils имеет метод

public static boolean ifAllGranted(final String roles)

Ответы [ 3 ]

3 голосов
/ 01 ноября 2011
hasRole('ROLE_ADMIN') and hasRole('ROLE_USER')

Не может быть намного проще

2 голосов
/ 01 ноября 2011

Если вы используете @PreFilter вместо @Secured, вы можете написать:

@PreFilter("hasRole('ROLE_ADMIN') and hasRole('ROLE_USER')")
1 голос
/ 01 ноября 2011

не могли бы вы сделать hasRole('ROLE_ADMIN') and hasRole('ROLE_USER')?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...