我正在使用新的Spring Security 3.1,并对Spring Security ACL提出了一些问题。
因此,假设我有一个对象,并希望为其定义ACL。我创建一个ACL条目,并希望将其与一组用户对齐;不是角色(GrantedAuthoritySid
),不是一个用户(PrincipalSid
),而是一组用户。我已经到处研究过一个例子但是找不到任何例子。能否请您指出在这种情况下可以帮助我的示例或课程?
所以现在我想创建一个与第一个对象相关的第二个对象(它应该适用于同一个用户)。
例如,这可以是第一个对象的状态更新。我的GrantedAuthority
或Principal
对第二个对象具有不同的permisions掩码。
此外,第一个对象有2 GrantedAuthorities
(2 ACLEntries
),状态更新只有一个。如果我使用ACL继承,则第一个对象的permision集与第二个对象的permision集不匹配。
我的问题是如何对此进行建模,以便两个对象的GrantedAuthorities
自动保持一致,同时保留不同的permision蒙版。一个想法是使用复合模式链接第一个对象的GrantedAuthority
上的第二个对象的GrantedAuthority
(而不是将其链接到用户)。
ACL拥有所有者。主人是什么?它对ACL或ACL条目起什么作用?
答案 0 :(得分:1)
这有点复杂。我反向设计Spring源代码以理解原理,这花了我很多时间。我不能确切地告诉你我是如何实现它的(因为它对我所从事的项目非常具体)但是会尝试给你一个起点。
我做的是:
org.springframework.security.acls.sid.Sid
。此Sid
引用的不是authority
或user
,而是一种具有id并引用两个不同对象的groupobject。要将此组对象用作Sid
,您必须创建ACL_Sid
- 对象的id
作为ACL_sid.sid
的记录。 ACL_sid.principal
必须是0或1以外的整数,必须在自定义LookupStrategy
的测试中检查(参见下面的Spring源代码)。org.springframework.security.acls.sid.SidRetrievalStrategyImpl
以从数据库中检索自定义Sid
。org.springframework.security.acls.jdbc.LookupStrategy
。我复制了一个现有的实现(因为该类是最终的)并根据我的需要对其进行了修改。查看Spring源代码并了解它是如何完成的。
答案 1 :(得分:0)
要将对象分配给一组用户,对于同一对象,每个用户都应该有一个ACL条目。这可能会导致相当大量的ACL记录。