首页 > 解决方案 > Jhipster - 检查用户的角色

问题描述

我在 Jhipster 默认生成的 UserResource.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,我想我可以用它来检查用户的角色,但我不知道该怎么做。有人可以帮助我吗?

标签: javaspringspring-securityjhipsterroles

解决方案


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

一种方法是向您的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);
    });
}

推荐阅读