2011-08-04 171 views
2

我正在使用新的Spring Security 3.1,并向Spring Security ACL提出了一些问题。春季ACL问题

  1. 所以我们假设我有一个对象并且想为它定义一个ACL。我创建一个ACL条目,并希望将其分配给一组用户;不是角色(GrantedAuthoritySid),不是一个用户(PrincipalSid),而是一组用户。我为了一个例子而到处研究,但是找不到任何东西。你可以请我指点一个例子或在这种情况下帮助我的班级吗?

  2. 所以现在我想创建第二个对象,它与第一个对象(它应该适用于相同的用户)有关。 例如,这可能是第一个对象的状态更新。我的GrantedAuthorityPrincipal对第二个对象具有不同的权限掩码。 另外第一个对象有2 GrantedAuthorities(2 ACLEntries),并且状态更新只有一个。如果我使用ACL继承,第一个对象的permision集合与第二个对象的permision集合不匹配。 我的问题是如何建模,以便两个对象的GrantedAuthorities自动保持一致,同时保留不同的permision遮罩。一个想法是使用复合模式链接第一个对象的GrantedAuthority上的第二个对象的GrantedAuthority(而不是将其链接到用户)。

  3. ACL拥有一个所有者。业主是什么?它为ACL或ACL条目起什么作用?

回答

1

这有点复杂。我反向设计了Spring源代码来理解原理,并花了我很多时间。我不能完全告诉你我是如何实现它的(因为它对于我正在进行的项目非常具体),但会尝试给你一个起点。

我所做的是:

  • 实现自定义org.springframework.security.acls.sid.Sid。这个Sid引用不是authorityuser,而是一种具有id并引用两个不同对象的组对象。要使用此组对象作为Sid,您必须创建一个ACL_Sid - 将对象的id记录为ACL_sid.sidACL_sid.principal必须是0或1以外的整数,必须在自定义LookupStrategy(参见下文和Spring源代码)的测试中进行检查。
  • 延伸org.springframework.security.acls.sid.SidRetrievalStrategyImpl从数据库检索自定义Sid's。
  • 实施自定义org.springframework.security.acls.jdbc.LookupStrategy。我复制了一个现有的实现(因为该类是最终的),并根据我的需要对其进行了修改。
  • 有线一切融合在一起的春天配置,因为默认的春天ACL配置需要没有哪个班就不得不使用(而不是默认值)

看春源代码,看看它是如何做。

0

要将一个对象分配给一组用户,每个用户对于同一个对象应该有一个ACL条目。这可能会导致大量的ACL记录。

+0

这就是为什么我们要 – fvisticot