2011-05-26 140 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應該是其登錄的用戶對象有作爲部分角色解決這個問題的當局。基本上任何具有此角色的人都可以管理權限。