【发布时间】:2015-10-16 09:54:25
【问题描述】:
我正在使用 Spring Security 和域级安全 (ACL)。
我有两个域 Company 和 Book。
class Company {
String name
hasMany = [books: Book]
}
class Book {
String title
belongsTo = [company: Company]
}
我读到 ACL 可以有一个 Parent 来继承它的权限。
在服务中,我会有这样的方法来设置新书卡的权限:
@PreAuthorize("hasRole('ROLE_ADMIN') or hasPermission(#book, admin)")
void addPermission(Book book, String username, Permission permission) {
aclUtilService.addPermission(book, username, permission)
}
这可以正常工作并为新书实例创建权限。我还有一个更新方法,可以在更新图书之前检查权限。
@PreAuthorize("hasPermission(#book, write) or hasPermission(#book, admin)")
Book update(Book book, Map params = [:]) {
book.properties = params
book.save(flush:true)
return book
}
只要用户拥有该书的权限,此方法就可以正常工作。但是,我想使用父对象(公司)的权限来继承到这本书。当用户有权访问公司时,我希望它也有权访问公司的所有书籍。
我在AclImp 中看到有一个方法setParent()。如果你这样做,这会起作用:
AclImpl acl = aclUtilService.readAcl(book)
acl.setParent(aclUtilService.readAcl(book.company))
aclService.updateAcl(acl)
使用上面的代码将在数据库中设置 book 的父级。
如何在 Spring Security ACL 中使用继承?
【问题讨论】:
标签: java spring grails groovy spring-security