繁体   English   中英

如何在Spring Security ACL中更改权限?

[英]How to change the Permisions in Spring Security ACL?

我想将为用户提供的权限扩展到实体。

我可以通过MutableAclService创建ACL。

MutableAcl acl = this.mutableAclService.createAcl(new ObjectIdentityImpl(entity));            
acl.setOwner(SYSTEM_PRINCIPAL_SID);
acl.insertAce(0, permission, grantToSid, true);
this.mutableAclService.updateAcl(acl);

但是我不知道如何更改ACL。 例如,如果用户对实体具有“读取权限”,我想向他提供其他“写入权限”。 或给其他用户相同的特权。


我的第一次尝试是两次调用MutableAclService.createAcl ,但是失败了:

org.springframework.security.acls.model.AlreadyExistsException:对象身份'org.springframework.security.acls.domain.ObjectIdentityImpl [Type:test.Entity; 标识符:3]'已经存在

确定接缝是正确的,错误的方式。 但是那怎么办呢? 如何更改已经定义了某些权限的实体的ACL权限?

我认为您已经有了答案,如果创建了MutableAcl ,则可以简单地调用MutableAclServiceupdateAcl方法。 如果正确实现了此方法的协定(如果使用自定义实现),则应:

  • 从该实体的当前ACL中删除所有ACE
  • 根据您传递给updateAclMutableAcl创建所有新的ACE
  • 更新ObjectIdentity上的所有相关字段
  • 更新ACL缓存

唯一的缺点是,它假定ACL具有“擦除并加载”策略,而不是要向现有ACL中增量添加ACE和其他内容。 这意味着您可能应该先完整阅读ACL,然后再进行修改,以免您无意中删除主体上已经存在的任何ACE。

希望有帮助!

我看过代码,它似乎表明ACL接口只有一个相关的实现: AclImpl

此类实现MutableAcl接口,并由AclService函数返回。

因此,我决定将结果从AclMutableAcl 到目前为止,它正在运行,并且没有出现问题或类强制转换异常:

MutableAcl existingAcl = (MutableAcl) mutableAclService.readAclById(oid, sids);
...
mutableAclService.updateAcl(existingAcl);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM