2

我们有一个基于这篇文章这篇文章的解决方案。现在我们需要增强这个解决方案。这是用例。

有各种权限,例如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

我们有基于令牌的身份验证的 REST 应用程序。

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

现在我们有一个管理界面,我们可以从 UI 控制这些限制,在用于创建用户的 UI 中,我们不会ROLE_ADMINROLE_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_ADMIN都有ROLE_ADMIN权限CREATE_USER。如果当前用户角色不是ROLE_ADMINapi 在尝试创建具有角色的用户时应以拒绝访问响应ROLE_ADMIN。请帮忙。

4

1 回答 1

0

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

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

希望可以实施任何一种选择。

于 2015-12-22T03:06:02.840 回答