[英]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
,则可以简单地调用MutableAclService
的updateAcl
方法。 如果正确实现了此方法的协定(如果使用自定义实现),则应:
updateAcl
的MutableAcl
创建所有新的ACE ObjectIdentity
上的所有相关字段 唯一的缺点是,它假定ACL具有“擦除并加载”策略,而不是要向现有ACL中增量添加ACE和其他内容。 这意味着您可能应该先完整阅读ACL,然后再进行修改,以免您无意中删除主体上已经存在的任何ACE。
希望有帮助!
我看过代码,它似乎表明ACL接口只有一个相关的实现: AclImpl
。
此类实现MutableAcl
接口,并由AclService
函数返回。
因此,我决定将结果从Acl
为MutableAcl
。 到目前为止,它正在运行,并且没有出现问题或类强制转换异常:
MutableAcl existingAcl = (MutableAcl) mutableAclService.readAclById(oid, sids);
...
mutableAclService.updateAcl(existingAcl);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.