任何用户都可以创建自己的机器人。机器人只能由创建者或管理员编辑。
下一代码完美无缺,这是一个简单易用的解决方案:
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
params.id
在这个地方毫无意义||
)在此无效。我尝试了其他不幸运的方法。我不清楚Groovy documentation。可以在Config.groovy中进行吗?如果没有,正确的方法是以某种方式使用<sec:access> ... </sec:access>
?
答案 0 :(得分:2)
我认为你不能用普通的Spring Security核心来做那种事情。
您的老师是正确的,您可能不应该以临时方式实施安全性,但您不一定应该在Config.groovy中执行此操作 - 这有点限制。
您可能希望使用Spring Security ACL plugin,它会添加更多域类,并允许您使用更精细的细节设置访问控制。
结帐the official docs。您可能需要一段时间才能学习它,但它比推出自己的ACL机制要好得多。