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