Я использую 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)