【问题标题】:Jhipster - check Role of a UserJhipster - 检查用户的角色
【发布时间】:2020-08-04 05:17:47
【问题描述】:

我在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&lt;Authority&gt; authorities,我想我可以用它来检查用户的角色,但我不知道该怎么做。有人可以帮助我吗?

【问题讨论】:

    标签: java spring spring-security jhipster roles


    【解决方案1】:

    您可以通过多种方式做到这一点,我会将这种行为委托给服务而不是资源。

    一种方法是向您的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);
        });
    }
    

    【讨论】:

    猜你喜欢
    • 2022-10-16
    • 2011-11-05
    • 2016-07-30
    • 1970-01-01
    • 2016-08-28
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多