我在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
我在想我可以或许用这个来检查用户的角色,但我不知道该怎么做。谁能帮助我?
你可以用很多方法来实现这一点,我会把这个行为委托给服务而不是资源。
其中一种方法是在你的 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);
});
}