Jhipster - 检查用户的角色

Jhipster - check Role of a User

我在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
}

用户 class 有一个属性 Set<Authority> authorities,我想我也许可以用它来检查用户的角色,但我不知道该怎么做。有人可以帮助我吗?

您可以通过多种方式做到这一点,我会将此行为委托给服务而不是资源。

一种方法是向您的 User.java class 添加一个新方法来检查用户是否具有特定角色。类似于:

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);
    });
}