授予Spring Security ACL权限

时间:2011-05-26 06:08:11

标签: spring-security acl

我在grails 1.3.7中使用Spring Security ACL插件,但我的问题可能比这更通用:我想允许BasePermission.READ访问某个对象的用户能够授予该权限对其他用户的相同权限。如果user1具有对文档的读访问权,则他应该能够与user2共享该文档,从而为他提供对同一文档的读访问权。

首次创建文档时,user1被授予读访问权限,因此我在日志中看到了这一点:

DEBUG   grails.app.service.org.grails.plugins.springsecurity.service.acl.AclUtilService     Added permission BasePermission[...............................R=1] for Sid PrincipalSid[User user1] for com.fxpal.ara.Document with id 1

然后我尝试在user1认证时向user2授予READ权限,我得到了这个例外:

org.springframework.security.acls.model.NotFoundException: Unable to locate a matching ACE for passed permissions and SIDs

所以我的问题是: 1.是否要求BasePermission.ADMINISTRATION允许用户向其他用户授予权限? 2.在仅拥有部分权限的情况下,还有其他方法可以授予权限吗?该政策在哪里实施,是否可以替换?

更新:

好吧,我想我可以添加一个AclAuthorizationStrategy的新实现来定义方法public void securityCheck(Acl acl, int changeType),但是这个方法不会将请求的权限作为参数,这会影响我检查兼容性的策略权限。接下来要做的是重新实现AclImpl以使用不同的逻辑。重复大部分相同的代码似乎是一种耻辱......

1 个答案:

答案 0 :(得分:0)

您可以通过创建

来解决此问题
<bean id="aclAuthorizationStrategy" class="org.springframework.security.acls.domain.AclAuthorizationStrategyImpl">
     <constructor-arg>
         <bean class="org.springframework.security.core.authority.SimpleGrantedAuthority">
              <constructor-arg>
                   <value>ROLE_ADMINISTRATOR</value>
              </constructor-arg>
         </bean>
     </constructor-arg>
</bean>

此处ROLE_ADMINISTRATOR应该是Logged in User对象作为权限一部分的角色。基本上任何具有此角色的人都可以管理权限。