- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用具有域级安全性 (ACL) 的 Spring Security。
我有两个域 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)
使用上面的代码将在数据库中设置书籍的父级。
如何在 Spring Security ACL 中使用继承?
最佳答案
您可以这样做而不是使用父 ACL:
@PreAuthorize("hasPermission(#book.company, write) or hasPermission(#book.company, admin)")
Book update(Book book, Map params = [:]) {
book.properties = params
book.save(flush:true)
return book
}
如果您希望从父 ACL 继承,请确保子项的 AclObjectIdentity
将 entriesInheriting
设置为 true
,例如使用方法createAcl
如下:
void createAcl(Class clazz, Long id, String sid, AclObjectIdentity parent) {
clazz = ProxyUtils.unproxy(clazz)
AclClass aclClass = AclClass.findOrSaveByClassName(clazz.name)
AclSid ownerSid = AclSid.findOrSaveBySidAndPrincipal(sid, true)
AclObjectIdentity oid = findOrCreateObjectIdentity(aclClass, ownerSid, id, parent, true)
}
AclObjectIdentity findOrCreateObjectIdentity(AclClass aclClass, AclSid ownerSid, Long id, AclObjectIdentity parent, boolean entriesInheriting) {
assert aclClass, "aclClass is required"
assert null != id, "id is required"
AclObjectIdentity oid = AclObjectIdentity.findOrCreateByAclClassAndObjectId(aclClass, id)
if (null == oid.id) {
oid.entriesInheriting = entriesInheriting
oid.owner = ownerSid
oid.parent = parent
oid.save(flush: true, failOnError: true)
}
oid
}
如果 ACL 继承 @PreAuthorize("hasPermission(#child, read)")
如果当前用户已读取父级的 ACL,则返回 true
关于java - Spring Security ACL继承: How does it really works?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31632325/
我正在尝试修改一个对象的 ACL,而不创建另一个对象。我不希望删除或覆盖当前的 ACL。每当我使用 object.setACL() 时,它都会覆盖当前的 ACL。 有没有办法保存修改后的ACL而不覆盖
我正在尝试修改一个对象的 ACL,而不创建另一个对象。我不希望删除或覆盖当前的 ACL。每当我使用 object.setACL() 时,它都会覆盖当前的 ACL。 有没有办法保存修改后的ACL而不覆盖
我在客户端和服务器之间有一个代理服务器。 我使用 XDR 读取和修改它们之间的 NFS 消息 例如,如果我想编辑文件大小并获取属性回复我使用结构和函数 GETATTR3res bool_t xdr_G
我正在考虑 RabbitMQ 在创建多用户聊天系统方面的用处。人们可以在不同的房间里聊天,一些是公共(public)的,一些是私有(private)的,还有私有(private)的。是否有可能实现私有
无法让属于“用户”组的用户访问(至少阅读)项目。我已经阅读并尝试了我在互联网上找到的几个例子,似乎没有一个工作。 我现在需要的是:允许属于“用户”组的任何用户读取名为 MYPROJECT 的项目。我有
我正在使用 mosquitto 1.4.5 版本。 我正在尝试让一个单独的插件对 mosquitto 代理的主题订阅进行 ACL 检查,并使用提供的 header 进行发布。 只是为了测试 auth
大家好,这可能是一个愚蠢的问题,但我真的对 ACL、RBAC、DAC、MAC 感到困惑...... 以具有以下用户类型的在线大学管理系统为例: 管理员 房车 教职工 学生 他们每个人都有不同的访问权限
我是环回的新手。我已经为所有用户 ($everyone) 创建了拒绝权限的 ACL。但是我可以通过 swagger 访问所有 API。有人可以解释一下吗?以下是我的 ACL。谢谢。 "acls": [
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 7 年前。 Improve
我们的应用程序使用一个组件,该组件需要我们的可执行文件所在目录中的许可证文件,它恰好是一个 .NET WinForms 应用程序,但我认为这对这个问题无关紧要。当安装在一些 XP Pro 机器上时(目
我正在使用 Web Deploy 将 Web 应用程序部署到我的主机。当使用 Publish 命令从 Visual Studio 运行时,它工作正常。当我尝试使用 MSBuild 的 web 部署进行
我刚刚开始使用 Grails,并且正在尝试配置 spring-security-acl 插件。我一直在关注official plugin tutorial但是在尝试运行我的应用程序时无法通过引导阶段(
谁能建议一种可扩展的设计模式来实现对照片和相册的访问控制,每个都有单独的隐私设置(即所有者、组成员、公开)? 我正在使用 CakePHP,我在 ACL 组件上阅读的示例似乎控制对 Controller
我一直在关注this guide加载我的菜单配置,我认为这是加载菜单的非常好的和干净的方式。 我的问题很简单,有没有办法以与配置数组和某种工厂相同的方式加载 ACL 配置? 如果没有,我如何加载 AC
New-Item -Type Directory -Path "C:\MyFolder" $Acl = Get-Acl "C:\MyFolder" $Ar = New-Object System.Se
在 android 中,我在后端使用 Parse 和 back4app.com,每当我在返回保存回调中使用 myParseobject.saveInBackground() 时,我都会收到错误消息,指
我有一个正在将数据帧写入 ADLS Gen2 存储中的文件的数据 block 笔记本。 它创建一个临时文件夹,输出文件,然后将该文件复制到一个永久文件夹。由于某种原因,该文件没有正确继承 ACL。它创
我陷入了两难的境地。我正在使用 spring-security-acl 及其 jdbc 实现。问题是,我在其他查询中使用 JPA 存储库 (Spring-data-jpa)。我认为,这没问题,因为 J
我有代码可以在“line vty”上查找“access-class”的名称 之后我能够找到 ACL,但随后我想检查 ACL 的每一行以验证“拒绝”和“允许”语句是否具有“log”关键字。如果条目上没有
我正在使用 Cloudera 的 Hadoop CDH 发行版,并且最近从 CDH3 升级到了 CDH4。 在 CDH3 中,我曾经能够将用户名添加到 hadoop-policy.xml 中,用于:
我是一名优秀的程序员,十分优秀!