Jhipster – 检查用户的角色

我在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);
    });
}

给TA打赏
共{{data.count}}人
人已打赏
解决方案

django orm如何获取一个数组中第一个元素的和?

2022-5-11 1:00:18

解决方案

从控制台应用程序中动态地使用DLL文件

2022-5-11 2:00:26

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索