Java Spring安全角色-用户只能更改自己的数据?

Java Spring安全角色-用户只能更改自己的数据?,java,spring,hibernate,spring-security,Java,Spring,Hibernate,Spring Security,我开始使用SpringSecurity。目前,我正在设置,若用户不创建表,那个么他们必须登录。或者,例如,在ControllerClass I中,配置为只有角色为“”的用户才能删除表 我的问题是,我可以用什么方式设置,当用户登录并创建一些表和创建团队成员时,表或成员只能编辑或删除创建表和成员的用户 例如,我在控制器中有删除表的方法 @RestController @RequestMapping(value="/api/tables") public class ApiTableControlle

我开始使用SpringSecurity。目前,我正在设置,若用户不创建表,那个么他们必须登录。或者,例如,在ControllerClass I中,配置为只有角色为“”的用户才能删除表

我的问题是,我可以用什么方式设置,当用户登录并创建一些表和创建团队成员时,表或成员只能编辑或删除创建表和成员的用户

例如,我在控制器中有删除表的方法

@RestController
@RequestMapping(value="/api/tables")
public class ApiTableController {

@Autowired
TableService tableService;
@Autowired
TableConverter tableConverter;

@PreAuthorize("hasRole('ROLE_USER')")    
@RequestMapping(value="/{id}", method=RequestMethod.DELETE)
public ResponseEntity<TableDTO> deleteTable(@PathVariable Long id) {
    Table table = tableService.findOne(id);
    if (table != null) {
        TableDTO tableDTO = tableConverter.table2TableDTO(table);
        tableService.remove(id);
        return new ResponseEntity<>(tableDTO, HttpStatus.OK);
    } else {
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
}

我使用hibernate、maven、RESTFull web服务器、backbone.js

这不是一个详细的答案,但准备好发表评论的时间太长了

Spring security附带的功能正是您所需要的:

这是一个相当高级的特性,因为if需要添加一组表来表示每个安全域对象上用户的授权。一个用于对象类,一个用于对象本身(仅存储主键),另一个用于实际授权。事实上,它可以看作是共享文件系统上的授权

您通常使用then方法安全性和
@PreAuthorize
注释,该注释允许使用包含方法实际参数的表达式。您可以直接允许用户修改或删除每个域对象

除了上面提到的Spring安全参考手册之外,您还可以在上找到关于ACL的完整教程


我的建议是:如果你在某些特定问题上遇到困难,请尝试并在这里提问。

你可以在你的实体中使用@PreRemove/@PreUpdate/@PrePersist,并实现你自己的逻辑

  @PreRemove
    private void preventUnAuthorizedRemove() {

       String name = SecurityContextHolder.getContext().getAuthentication().getName();

      if(!name.equals(this.username)){
          throw new NotAuthorizedException("User can only delete himself ");
      }

    }

还有一个问题。。。。我可以使用前注释或后注释吗?比如说像这样的预授权(#table.userName==authentication.name),我在每个表中输入创建该表的用户的名称。当尝试删除时,如果authentication.name=table.userName,则登录用户和创建表的用户相同,并且可以删除表。。???
@Entity
@javax.persistence.Table(name="tblTable")
public class Table {
@Id
@GeneratedValue
@Column(name="table_id")
private Long id;
@Column(name="name", nullable=true)
private String name;
@Column(name="sport", nullable=true)
private String sport;
@Column(name="typeTable", nullable=true)
private String TypeTable;
@Column(name="dateCreated", nullable=true)
private Date dateCreated;
@Column(name="changed", nullable=true)
private Date changed;
@Column(name="description", nullable=true)
private String description;
  @PreRemove
    private void preventUnAuthorizedRemove() {

       String name = SecurityContextHolder.getContext().getAuthentication().getName();

      if(!name.equals(this.username)){
          throw new NotAuthorizedException("User can only delete himself ");
      }

    }