Spring security Jhipster,阻止用户更新其他用户创建的实体

Spring security Jhipster,阻止用户更新其他用户创建的实体,spring-security,jhipster,Spring Security,Jhipster,我一直在我的工作中实施Jhipster并热爱它。我被要求实现一个安全验证,不允许一个用户编辑其他用户创建的实体。为此,我需要两件事: 首先,在所有实体中,添加与用户实体的manytone关系 在后端,在更新实体时在控制器中放入验证,以检查当前登录的用户是否与数据库中存储的用户相同。在前端,显示/隐藏编辑按钮的逻辑也相同 我已经为此做了一个POC,它可以工作,但有点难看,请检查代码: public ResponseEntity<Entry> updateEntry(@RequestBo

我一直在我的工作中实施Jhipster并热爱它。我被要求实现一个安全验证,不允许一个用户编辑其他用户创建的实体。为此,我需要两件事:

  • 首先,在所有实体中,添加与用户实体的manytone关系

  • 在后端,在更新实体时在控制器中放入验证,以检查当前登录的用户是否与数据库中存储的用户相同。在前端,显示/隐藏编辑按钮的逻辑也相同

  • 我已经为此做了一个POC,它可以工作,但有点难看,请检查代码:

    public ResponseEntity<Entry> updateEntry(@RequestBody Entry entry) throws URISyntaxException {
            log.debug("REST request to update Entry : {}", entry);
            if (entry.getId() == null) {
                throw new BadRequestAlertException("Invalid id", ENTITY_NAME, "idnull");
            }
    
            //here is my logic 
            Optional<Entry> entry_db = entryRepository.findOneWithEagerRelationships(entry.getId());
            if(!entry_db.get().getUser().getId().equals(userService.getUserWithAuthorities().get().getId())) {
                //throw someexception
            }
            //
            Entry result = entryRepository.save(entry);
            return ResponseEntity.ok()
                .headers(HeaderUtil.createEntityUpdateAlert(ENTITY_NAME, entry.getId().toString()))
                .body(result);
        }
    
    public ResponseEntity updateEntry(@RequestBody Entry)抛出URISyntaxException{
    debug(“REST请求更新条目:{}”,条目);
    if(entry.getId()==null){
    抛出新的BadRequestAlertException(“无效id”,实体名称,“idnull”);
    }
    //这是我的逻辑
    可选条目_db=entryRepository.findOneWithEagerRelationships(entry.getId());
    如果(!entry_db.get().getUser().getId().equals(userService.getUserWithAuthorities().get().getId())){
    //抛出异常
    }
    //
    条目结果=entryRepository.save(条目);
    返回ResponseEntity.ok()
    .headers(HeaderUtil.createEntityUpdateAlert(实体名称,entry.getId().toString())
    .机构(结果);
    }
    
    有没有更好或更好的方法???可能是我不知道的春安事件


    谢谢你的帮助

    这是Spring Security基于表达式的访问控制的工作,特别是您可以使用
    @PreFilter
    和自定义
    PermissionEvaluator来注释您的方法,您可以使用与POC中类似的逻辑来实现。如果定义一个
    Owned
    接口,该接口使用
    User getOwner()
    等方法对所有权进行建模,并且所有实体类都将实现,则
    PermissionEvaluator
    可以是通用的,并应用于多种实体类型

    带注释的方法应该在服务中,而不是在资源控制器中


    另外,
    UserService
    本身也不能帮助您找到当前已验证的用户,您应该先使用JHipster的
    SecurityUtils
    ,然后再使用
    serService
    ,如果您需要有关它的更多数据。

    感谢您快速清晰的回复。我要去看看这个。