2013-12-09 67 views
0

爲所有用戶(註冊和匿名)讀取對象權限的最佳方式是什麼?我正在開發一個系統,用戶可以創建任何人都可以查看的項目,但只能由創建者或管理員用戶進行編輯。使用Spring Security ACL - 如何爲所有用戶(註冊和匿名)分配對象的讀取權限?

想到的一個解決方案是Spring爲未經授權的用戶角色提供了ROLE_ANONYMOUS,我可以將其更改爲ROLE_USER,並將其提供給所有我已通過身份驗證的用戶,這樣每個人都是ROLE_USER。然後,所有可公開查看的實體都將獲得爲ROLE_USER插入的READ權限,並且從那裏我可以使用組(GrantedAuthoritySid)來確定您是否有權訪問(每個人都可以訪問)。

我想知道是否有更好的方法來實現,而不是對每個公共對象給予ROLE_USER讀取權限?

回答

1

如果有問題的對象可以被任何人查看,那麼你不需要對它們應用ACL。僅將ACL應用於修改此類對象的操作。

如果每個對象的可見性(公共/私人)可配置,則可以使用專用標誌並通過此標誌驅動可見性(例如通過expression-based access control)。但是,如果您想要堅持使用ACL,您也可以創建專用角色(例如ROLE_READER),並在進行身份驗證時動態地將角色分配給匿名用戶和經過身份驗證的用戶。

請參見類org.springframework.security.core.authority.mapping.SimpleAuthorityMapper,可以使用默認權限(您的情況爲ROLE_READER)將其分配給所有用戶。然後在驗證過程中使用映射器。由於您未指定用戶的身份驗證方式,因此我想用戶名/密碼架構和默認值爲org.springframework.security.authentication.dao.DaoAuthenticationProvider。如果你仔細觀察這個類,你會發現你可以設置一個權限映射器來使用。

對於匿名用戶,您可以將默認權限設置爲構造函數參數org.springframework.security.web.authentication.AnonymousAuthenticationFilter

+0

偉大的答案,非常詳細,正是我需要的。 – SergeyB

相關問題