Jhipster - 检查用户的角色

问题描述 投票:1回答:1

我在UserResourse.java中有以下方法,是Jhipster默认生成的。

@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 我在想我可以或许用这个来检查用户的角色,但我不知道该怎么做。谁能帮助我?

java spring spring-security jhipster roles
1个回答
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);
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.