2017-01-13 3 views
1

В Grails я используюGrails: @Secured аннотаций для ИЛИ роли

import grails.plugin.springsecurity.annotation.Secured 

@Secured({'ROLE_COMPANY', 'ROLE_BACKEND_ADMIN'}) 
class MobileSendersController { 

но это положить и отношения между ролями. Мне нужно отношение OR. Доступ разрешен до ROLE_COMPANY или ROLE_BACKEND_ADMIN.

В этом question ответы советуют использовать @PreAuthorize. Я попробовал это в Grails, но не повезло. Возможно, мне нужно изменить предварительные и пост-аннотации, но я не могу найти конфигурацию.

Любые идеи?

+0

http://stackoverflow.com/questions/34182034/grails-spring-security-role-and-group даст понять, как заставить группы ролей работать. – Vahid

ответ

0

Почему у вас есть две роли для одного контроллера? Возможно, подумайте о наличии единственной привилегии для своего контроллера, а затем вы можете добавить эту привилегию в свои роли ROLE_COMPANY и ROLE_BACKEND_ADMIN.

+1

Интересная идея. Но. Представьте, что у вас есть роли A, B, C и контроллеры C1, C2, C3. C1 можно получить через A и B. C2 через B, C. C3 только на A. При вашем подходе каждый отдельный контроллер должен получить специальное разрешение. Способ с OR более зернистый. – zatziky

4

Если вы взгляните на fore @Secured, вы увидите, что он использует выражения SpEL (documentation, об этом), поэтому вы можете сделать немало вещей. В частности, вы хотели бы использовать hasAnyRole() так:

@Secured("hasAnyRole('ROLE_COMPANY', 'ROLE_BACKEND_ADMIN')")

+0

Джош, я изменил принятый ответ, поскольку @Ankit Agrawal отвечает больше Grails. – zatziky

+0

@zatziky, ладно, не уверен, что делает его ответ более Grails, чем мой. Они оба используют один и тот же плагин и ту же самую аннотацию. Ваш выбор. –

+0

Джош, возможно, вы правы. Я нахожу это лучше, поскольку он короче. Это спорно, потому что для newcommers 'hasAnyRole' является более всеобъемлющим. Таким образом, вы оба разделяете принятый ответ. – zatziky

Смежные вопросы