2011-05-16 2 views
1

This question имеет некоторый код для добавления к закрытию контроллера, но это хорошо, но что, если я хочу использовать графические изображения по умолчанию, но только для редактирования/обновления кнопки отображаются, если пользователь является менеджером или объект домена принадлежит пользователю? Reading the documentation, я пытался:Grails w/Spring Security Core, разрешающий владельцу обновляться в GSP

<sec:access expression="hasRole('ROLE_MANAGER') || (projectInstance.owner == springSecurityService.currentUser)"> 
    <span class="button"><g:actionSubmit class="save" action="update" value="${message(code: 'default.button.update.label', default: 'Update')}" /></span> 
</sec:access> 

Но класс доступа, кажется, не позволяют ОШ:

Error processing GroovyPageView: Error executing tag <g:form>: Error executing tag <sec:access>: Cannot handle (124) '|' 

Кто-нибудь делал что-то подобное?

ответ

3

Я решил, что это будет глупо. Лучший подход, чтобы сделать это в контроллере, как:

def edit = { 
    def projectInstance = Project.get(params.id) 
    def managerOrAdmin = SpringSecurityUtils.ifAnyGranted('ROLE_ADMIN,ROLE_MANAGER') 
    def editable = (projectInstance.owner == springSecurityService.currentUser 
        || managerOrAdmin) 
    if (!projectInstance) { 
     flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'project.label', default: 'Project'), params.id])}" 
     redirect(action: "list") 
    } 
    else { 
     return [projectInstance: projectInstance, editable:editable] 
    } 
} 

, а затем в GSP сделать

<g:if test="${editable}"> 
    <span class="button"><g:actionSubmit class="save" action="update" value="${message(code: 'default.button.update.label', default: 'Update')}" /></span> 
</g:if> 

, который имеет смысл, если мы будем следовать хорошей программирования мантру «мнения должны делать, как мало возможно, в MVC "

+0

Я согласен с этим подходом, поскольку ваше выражение немного сложнее, чем простая проверка роли. – Gregg

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