2015-03-11 2 views
0

Я работаю над проектом grails 2.3.8 и пытаюсь настроить Role Hierarchy. Я пытаюсь изменить значение по умолчанию rolePrefix = 'ROLE_' в resources.groovy с rolePrefix = 'PERM_'. Я понимаю, что, чтобы сделать эту работу, мне нужно сделать следующие изменения в моем Config.groovy во что-то вроде:Как настроить rolePrefix в Grails с помощью Spring Security plugin?

grails.plugins.springsecurity.userLookup.userDomainClassName = 'tpo.core.acl.AdminAccount' 
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'tpo.core.acl.AdminAccountPermission' 
grails.plugins.springsecurity.authority.className = 'tpo.core.acl.Permission' 

И установить иерархию, мне нужно, чтобы добавить это тоже в моем Config.groovy

grails.plugins.springsecurity.roleHierarchy = ''' 
    PERM_ACCOUNT_ALL > PERM_ACCOUNT_CREATE 
    PERM_ACCOUNT_ALL > PERM_ACCOUNT_READ 
    PERM_ACCOUNT_ALL > PERM_ACCOUNT_UPDATE 
    PERM_ACCOUNT_ALL > PERM_ACCOUNT_DELETE 
''' 

Так что в моем контроллере, это что-то вроде,

@Secured(['PERM_ACCOUNT_ALL']) 
    def index() { 
     redirect(action: "list", params: params) 
    } 

Когда я пытаюсь запустить мое приложение, и получить доступ к index() действия моего контроллера, я был предложено из-за присутствия @Secured(), но после успешного входа в систему я еще не смог получить доступ к действию index(), и он отображается, к сожалению, у вас нет прав для просмотра этой страницы. Разрешение было назначено пользователю, с которым я вошел в систему, но тем не менее я не смог получить к нему доступ.

Где я пропущу?

ответ

1

Там намного больше, чем это :)

Причина, что плагин не позволяет это изменение является поддержка стандартных избирателей. В настоящее время существует три стиля строк, которые могут использоваться для указания правил доступа - имен ролей, выражений SPeL и фанковых «IS_AUTHENTICATED» - IS_AUTHENTICATED_ANONYMOUSLY, IS_AUTHENTICATED_FULLY и IS_AUTHENTICATED_REMEMBERED. Кроме того, есть новый способ, который был добавлен для версии 2.0 - с использованием Closure и любого произвольного кода Groovy внутри него, но это не связано с именами ролей.

Каждый зарегистрированный избиратель запрашивается, чтобы определить, поддерживают ли они (то есть могут голосовать) каждый из этих токенов. Логика в настоящее время довольно проста - строки «IS_AUTHENTICATED _...» обрабатываются одним избирателем, строки, начинающиеся с «ROLE_», обрабатываются другим, а все остальное считается выражением SPeL.

Если честно, я думаю, что в любом случае роли должны были быть «зарегистрированы» при запуске (чтобы указать, какие правила доступа разрешены для каждой роли в аннотациях, Config.groovy и т. Д.), Что роль избирателя могла бы сделать больше, чем просто проверьте, что строка начинается с некоторого префикса - он может посмотреть на свою коллекцию известных имен ролей. Поэтому, возможно, не слишком много работы, чтобы добавить поддержку пользовательских префиксов роли для выпуска 2.0, и я буду изучать это. Но на данный момент плагин настраивается как можно больше во всех отношениях, кроме этого исключения.

+0

Большое вам спасибо за ответ. Мы можем настроить префикс роли в grails 2.0.4 раньше, но теперь, следуя той же настройке, я больше не могу ее применять, используя grails 2.3.8, даже при использовании той же самой версии весенней безопасности, что и 1.2.7.3. Я потерял o_o – chemilleX3

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