0
任何用戶都可以創建他/她自己的機器人。機器人只能由創建者或管理員編輯。如何限制對使用Grails創建的用戶的編輯
的下一個代碼工作完全,它是一個容易和簡單的解決方案:
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「or」(
||
)在此處無效。我嘗試了其他方式,但不幸運。 Groovy documentation目前還不清楚。
是否可以在Config.groovy中做到這一點?如果不是,那麼正確的方法是以某種方式使用<sec:access> ... </sec:access>
?
謝謝。我一直在仔細閱讀文檔。它看起來是一個不錯的插件,但我認爲它很大程度上增加了代碼的複雜性。在這種情況下,我更喜歡我發佈的代碼('if(Robot.get(params.id).usuario.username =='...),因爲它很簡單並且工作正常。幾天來看看有人能給我們任何其他的想法,如果沒有,我會接受這個答案,因爲它是完全正確的,儘管我會用這個插件來處理更復雜的情況。 – chelder