2015-12-21 56 views
2

我們有一個基於此articlethis post實施的解決方案。現在我們需要增強這個解決方案。這是用例。基於春季安全權限的api訪問

有像CREATE_USER,CREATE_ORG等等各種權限......但基於用戶角色我們需要應用某些限制。例如ROLE_ADMIN以及ROLE_ORG_ADMIN可以創建用戶。但是ROLE_ORG_ADMIN只能創建用戶提供一些特定的權限(或ROLE_ORG_ADMIN不應該能夠創建ROLE_ADMIN權限的用戶)

  1. ROLE簡直是
  2. 用戶與角色並登錄相關的組的權限org.springframework.security.core.userdetails.User.authorities設置了權限而不是ROLE

我們使用基於令牌的身份驗證的REST應用程序。

@RequestMapping(value = "/users", 
    method = RequestMethod.POST, 
    produces = MediaType.APPLICATION_JSON_VALUE) 
@Secured(AuthoritiesConstants.CREATE_USER) 
public ResponseEntity<?> createUser(@RequestBody ...) 

現在我們有一個管理界面,我們控制從UI這些限制,在用戶界面,用於創建用戶我們不選擇列表中顯示爲ROLE_ADMINROLE_ORG_ADMIN。我們將向第三方公開api。我們不確定在api級別如何做到這一點。

POST /api/users 
{ 
    "id": null, 
    "login": "name", 
    "firstName": "first", 
    "lastName": "Last", 
    "email": "[email protected]", 
    "activated": true, 
    "langKey": "en", 
    "createdBy": null, 
    "createdDate": null, 
    "lastModifiedBy": null, 
    "lastModifiedDate": null, 
    "resetDate": null, 
    "resetKey": null, 
    "authorities": [ 
    "ROLE_ORG_ADMIN", 
    "ROLE_ADMIN" 
    ] 
} 

我們想要做的是限制與角色ROLE_ORG_ADMIN創建用戶角色ROLE_ADMIN用戶。 ROLE_ORG_ADMINROLE_ADMIN都有權限CREATE_USER。如果當前用戶角色不是ROLE_ADMIN,則在嘗試創建角色爲ROLE_ADMIN的用戶時,api應迴應拒絕訪問。請幫忙。

+0

@ willie-wheeler因爲你是我提到的文章的作者,請回顧這個問題。 – titogeo

回答

0

我想分享兩種處理方法, 選項1.如何在創建用戶時向用戶列出可用的User_Roles?如果顯示所有用戶角色並允許用戶選擇相應的角色,那麼在列出可用用戶角色本身時,如果記錄的用戶是ROLE_ORG_ADMIN,則可以避免列出ROLE_ADMIN。

選項2.如果您不喜歡在UI中處理它,則在後端創建USER時,如果登錄用戶ROLE_ORG_ADMIN嘗試使用ROLE_ADMIN創建USER,則可以通過該異常。您可以通過原則對象訪問登錄的用戶詳細信息。

希望任何一個選項都可以實現。

+0

我在處理這個UI沒有問題。我已經在做你提到的。我試圖找出如何控制何時公開API。看看是否有任何內在的春季方式來做到這一點。 – titogeo