Jhipster - проверять роль пользователя - PullRequest
1 голос
/ 21 апреля 2020

У меня есть следующий метод в 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, и я думаю, что, возможно, я смогу использовать это для проверки роли пользователя, но я не могу понять, как сделай это. Кто-нибудь может мне помочь?

1 Ответ

2 голосов
/ 23 апреля 2020

Вы можете сделать это разными способами, я бы делегировал это поведение службе, а не ресурсу.

Один из подходов заключается в добавлении нового метода в ваш класс 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);
    });
}
...