任何用户都可以创建他/她自己的机器人。机器人只能由创建者或管理员编辑。
下一个代码完美运行,这是一个简单易用的解决方案:
import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils
class RobotController {
def springSecurityService
def edit() {
if (Robot.get(params.id).usuario.username == springSecurityService.authentication.name
|| SpringSecurityUtils.ifAnyGranted("ROL_ADMIN,ROL_SUPERADMIN"))
println "editing allowed"
else
println "editing denied"
}
}
但是我的老师建议我使用 Config.groovy来保护网络。下一个代码不起作用:
grails.plugins.springsecurity.interceptUrlMap = [
'/index.gsp': ["isAuthenticated()"],
'/robot/edit/**': ["Robot.get(params.id).usuario.username == springSecurityService.authentication.name
|| hasAnyRole('ROL_ADMIN','ROL_SUPERADMIN')"],
'/robot/**': ["isAuthenticated()"]
]
它不起作用,因为不同的原因:
- 无法
Robot
在 Config.groovy中调用域类 params.id
在这个地方没有意义- Java“或”(
||
) 在这里无效。我尝试了其他没有运气的方法。Groovy 文档对我来说不是很清楚。
可以在 Config.groovy 中做到这一点吗?如果没有,正确的方法会以<sec:access> ... </sec:access>
某种方式使用?