我想使用grails spring安全性插件创建自定义权限处理程序。
想象一下,我有一个User类和一个具有多对多关联的公司类。
我想只允许用户在属于公司时调用名为“删除公司”的方法。例如:
class User {
static hasMany= [companies:Company]
static belongsTo = [Company]
}
class Company {
static hasMany = [users:User]
}
控制器操作如下所示:
def deleteCompany(Long id) {
}
我只想让用户调用属于公司的方法。所以当
assert Company.get(id}.users.find { it == currentUser }
这只是一个简化的例子。实际结构要复杂得多。这就是为什么我想为此使用弹簧安全的力量。
我已经使用了Spring安全ACL,但似乎我只能在服务中使用自定义权限而不能在控制器中使用自定义权限
答案 0 :(得分:0)
您可以在控制器中使用beforeInterceptor
:
def springSecurityService
def beforeInterceptor=[action:this.&auth]
private auth = {
def toBeCheckedId=params.id
if(toBeCheckedId
&& Company.get(toBeCheckedId}.users.find { it == springSecurityService.currentUser }){
redirect action:someHandlingAction
return false
}
}
}