【问题标题】:Can't use user with MANAGER role to create user from angular UI无法使用具有 MANAGER 角色的用户从角度 UI 创建用户
【发布时间】:2017-08-16 01:52:45
【问题描述】:

我正在尝试添加 MANAGER 角色。拥有 MANAGER 的用户必须能够创建其他用户。

我已经更新了 AuthoritiesConstants.java 如下:

public final class AuthoritiesConstants {

    public static final String ADMIN = "ROLE_ADMIN";

    public static final String USER = "ROLE_USER";

    public static final String ANONYMOUS = "ROLE_ANONYMOUS";
    public static final String MANAGER = "ROLE_MANAGER";

    private AuthoritiesConstants() {
    }
}

我也更新了 authority.csv:

name
ROLE_ADMIN
ROLE_USER
ROLE_MANAGER

我尝试像这样更新 UserResource.java:

@PostMapping("/users")
    @Timed
    @Secured({AuthoritiesConstants.ADMIN,AuthoritiesConstants.MANAGER})
    public ResponseEntity createUser(@Valid @RequestBody ManagedUserVM managedUserVM) throws URISyntaxException {
        log.debug("REST request to save User : {}", managedUserVM);

    }

还有这个:

@RestController
@RequestMapping("/api")
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class UserResource {
    @PostMapping("/users")
        @Timed
        @PreAuthorize("hasAnyRole('ROLE_ADMIN','ROLE_MANAGER')")
        public ResponseEntity createUser(@Valid @RequestBody ManagedUserVM managedUserVM) throws URISyntaxException {
            log.debug("REST request to save User : {}", managedUserVM);
           //....

        }
//....
}

我已登录 Angular UI 并创建了一个具有 ROLE_MANAGER 和 ROLE_USER 角色的用户 toto。我已经更新了 html 文件,以便拥有 ROLE_MANAGER 的用户可以访问用户管理页面。

当用户提交用户创建表单时,后端响应状态为 403 (Forbidden)。

【问题讨论】:

  • 我正在使用角度 UI。对于经理角色,我添加了 public static final String MANAGER = "ROLE_MANAGER";到 AuthoritiesConstants 和 ROLE_MANAGER 到 authority.csv
  • 我使用具有 ROLE_MANAGER 角色的用户登录。不,我不会更改 SecurityConifguration 中的任何内容。
  • 作为 admin ,我在 Angular UI 中创建了一个新用户并将这个角色分配给他。仅供参考,指令 *jhiHasAnyAuthority="['ROLE_MANAGER']" 工作正常。
  • 对不起,我放弃了,获取详细信息需要太多时间,而且您的所有问题总是缺少基本详细信息。
  • 好的。我将使用我所做的所有修改以及我打算做什么来编辑问题。

标签: spring-security jhipster


【解决方案1】:

我重现了您的问题并收到拒绝访问错误,但在浏览器控制台中它是针对/api/users/authorities

因此修复包括授权ROLE_MANAGER 角色访问UserResource.getAuthorities()

@GetMapping("/users/authorities")
@Timed
@Secured({AuthoritiesConstants.ADMIN, AuthoritiesConstants.MANAGER})
public List<String> getAuthorities() {
    return userService.getAuthorities();
}

【讨论】:

  • 你是对的。这就是问题所在。感谢您的支持。
猜你喜欢
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
相关资源
最近更新 更多