2011-05-26 92 views
3

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

当第一次创建的文档,用户1被授予读访问,所以我看到这个在日志中:

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 

然后我尝试给予读取权限的user2而认证为用户1,我得到这个例外:

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以使用不同的逻辑。似乎是一个耻辱,大多数重复相同的代码...

+0

您是否找到了解决方案? – fabiangebert 2012-03-22 07:30:11

+1

不,不是真的。我曾尝试使用'AclAuthorizationStrategyImpl',但没有完成。我将重新访问代码(已经有一段时间了!),看看是否有任何合理的我可以从那里提取这个问题的答案。 – 2012-03-26 03:53:52

回答

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应该是其登录的用户对象有作为部分角色解决这个问题的当局。基本上任何具有此角色的人都可以管理权限。