基于Spring安全权限的api

时间:2015-12-21 12:19:06

标签: java spring rest spring-security spring-rest

我们已根据此articlethis post实施了解决方案。现在我们需要增强这个解决方案。这是用例。

CREATE_USERCREATE_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
  3. 我们有基于令牌的身份验证的REST应用程序。

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

    现在我们有一个管理界面,我们从UI控制这些限制,在UI中创建用户我们不会在ROLE_ADMIN的选择列表中显示ROLE_ORG_ADMIN。我们将为第三方公开api。我们不确定如何在api级别完成此操作。

    POST /api/users
    {
      "id": null,
      "login": "name",
      "firstName": "first",
      "lastName": "Last",
      "email": "first.last@email.com",
      "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应响应拒绝访问。请帮忙。

1 个答案:

答案 0 :(得分:0)

我想分享两种处理方法, 选项1.如何在创建用户时向用户列出可用的User_Roles?如果要显示所有用户角色并允许用户选择相应的角色,那么在列出可用的用户角色本身时,如果记录的用户是ROLE_ORG_ADMIN,则可以避免列出ROLE_ADMIN。

选项2.如果您不想在UI中处理它,那么在后端创建USER时,如果登录用户ROLE_ORG_ADMIN尝试使用ROLE_ADMIN创建USER,则可以通过异常。您可以通过主要对象访问登录的用户详细信息。

希望可以实施任何一个选项。