我在 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
然后我尝试向 user2 授予 READ 权限,同时以 user1 身份进行身份验证,但出现以下异常:
org.springframework.security.acls.model.NotFoundException: Unable to locate a matching ACE for passed permissions and SIDs
所以我的问题是:
1. 正在拥有BasePermission.ADMINISTRATION
需要允许用户向其他用户授予权限吗?
2. 有没有其他方法可以在只有部分权限的情况下授予权限?该政策在哪里实施,是否可以替代?
Update:
好吧,我想我可以添加一个新的实现AclAuthorizationStrategy
它定义了方法public void securityCheck(Acl acl, int changeType)
,但此方法不会将请求的权限作为参数,从而破坏了我检查兼容权限的策略。接下来要做的事情是重新实现 AclImpl 以使用不同的逻辑。重复大部分相同的代码似乎是一种耻辱......
您可以通过创建
<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
应该是登录用户对象作为权限一部分所具有的角色。基本上具有此角色的任何人都可以管理权限。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)