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
,我想我可以使用它来检查用户的角色,但是我不知道该怎么做。有人可以帮我吗?
答案 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);
});
}