java - 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
,我想我可以用它来检查用户的角色,但我不知道该怎么做。有人可以帮助我吗?
解决方案
您可以通过多种方式做到这一点,我会将这种行为委托给服务而不是资源。
一种方法是向您的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);
});
}
推荐阅读
- ruby-on-rails - Rails:从 simple_form_for 集合关联中删除标签
- linux-kernel - 如何在 mknod 期间手动知道主要号码?
- javascript - 不知道如何传递图像的 id,以便我可以在我的 ajax 调用中使用它
- excel - 通过宏格式化 UserForm 对象并保留格式
- python - 访问嵌套字典时的代码差异
- javascript - 动态更新 ref Vuejs 和 Vuefire
- python-3.x - 使用 tkinter 将图像添加到 Gui 时遇到问题
- python - django 2.0.5 中 urls.py 中的 path() 问题
- codacy - Codacy API:发送 API 代码进行分析
- r - rstudio 通过比较其他两列(alphebet)创建一个新列