gpt4 book ai didi

grails - 带有Spring Security Core的Grails仅允许所有者在GSP中进行更新

转载 作者:行者123 更新时间:2023-12-02 14:21:23 26 4
gpt4 key购买 nike

This question有一些代码可以添加到 Controller 闭包中,这很好,但是如果我要使用grails默认的脚手架 View ,但是如果用户是管理员或域对象归所有者所有,则仅显示编辑/更新按钮怎么办?用户? Reading the documentation,我试过了:

<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>

但是访问类似乎不允许使用OR:
Error processing GroovyPageView: Error executing tag <g:form>: Error executing tag <sec:access>: Cannot handle (124) '|' 

有人做过类似的事情吗?

最佳答案

我认为那将是愚蠢的。更好的方法是在 Controller 中执行以下操作:

 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>

如果我们遵循“ View 应在MVC中尽可能少地执行处理逻辑”的良好编程原则,这是有道理的

关于grails - 带有Spring Security Core的Grails仅允许所有者在GSP中进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6022116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com