Jhipster-检查用户角色

时间:2020-04-21 12:45:55

标签: java spring spring-security jhipster roles

Jhipster默认生成的UserResourse.java中具有以下方法:

@DeleteMapping("/users/{login:" + Constants.LOGIN_REGEX + "}")
@PreAuthorize("hasRole(\"" + AuthoritiesConstants.ADMIN + "\")")
@Transactional
public ResponseEntity<Void> deleteUser(@PathVariable String login) {
    log.debug("REST request to delete User: {}", login);

    userService.deleteUser(login);
    return ResponseEntity.noContent().headers(HeaderUtil.createAlert(applicationName,  "userManagement.deleted", login)).build();
} 

如果要删除的用户具有特定角色,我想对数据库进行其他更改。我需要写:

Optional<User> user =  this.userService.findOneByLogin(login);
if(user.get().hasRole("ROLE_USER"){
 // do something
}

User类具有属性Set<Authority> authorities,我想我可以使用它来检查用户的角色,但是我不知道该怎么做。有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

您可以通过多种方式执行此操作,我可以将此行为委托给服务而不是资源。

一种方法是向您的User.java类添加新方法,以检查用户是否具有特定角色。像这样:

public boolean hasRole(String role) {
    return this.authorities.stream().map(Authority::getName).anyMatch(a -> a.equals(role));
}

然后从您的UserService.java调用它:

public void deleteUser(String login) {
    userRepository.findOneWithAuthoritiesByLogin(login).ifPresent(user -> {

        if (user.hasRole(AuthoritiesConstants.USER)){
            // Do your things here

        }

        userRepository.delete(user);
        log.debug("Deleted User: {}", user);
    });
}