gpt4 book ai didi

java - Spring Security Role - 用户只能更改自己的数据吗?

转载 作者:行者123 更新时间:2023-11-30 09:00:26 25 4
gpt4 key购买 nike

我开始使用 Spring Security。现在我设置用户如果不创建表就必须登录。或者,例如,在我配置为只有具有角色 ROLE_USER 的用户可以删除表的 ControllerClass 中。

我的问题是,当用户登录并创建一些表并创建 teamPlayers 时,我可以通过哪种方式设置该表或玩家只能编辑或删除创建表和玩家的用户。

例如,我在 Controller 方法中删除表 ...

@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);
}
}

在这种情况下,所有具有角色 ROLE_USER 的用户都可以删除所有表,但我不会只删除表用户如何创建表......是否有任何规则如何工作或标准代码?就像 StackOwerflow 上的配置文件。每个人都可以看到我们写的东西,每个人都可以创建个人资料,只有我可以编辑我在网站上写的个人资料或问题。我如何使用 Spring 安全性来做类似的事情?

这是用户类

@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue
@NotNull
@Column(name = "user_id")
private Long id;
@Column(name = "username")
private String name;
@Column(name = "password")
private String password;
@Column(name = "email")
private String email;
@Column(name = "country")
private String country;
@Column(name = "city")
private String city;
@Column(name = "dateCreated")
private Date dateCreated;
@Column(name = "enabled")
private boolean active;
@JoinTable(name = "user_security_role", joinColumns = { @JoinColumn(name = "user_id",
referencedColumnName = "user_id") }, inverseJoinColumns = {
@JoinColumn(name = "security_role_id", referencedColumnName = "id") })
@ManyToMany
private Set<SecurityRoleUser> securityRoleCollection;


@Override
public int hashCode() {

int hash = 0;

hash += (id != null ? id.hashCode() : 0);

return hash;

}

@Override
public boolean equals(Object object) {

if (!(object instanceof User)) {

return false;

}

User other = (User) object;

if ((this.id == null && other.id != null)
|| (this.id != null && !this.id.equals(other.id))) {

return false;

}

return true;

}

这是类 Table ...

@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;

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

最佳答案

不是真正详细的答案,但对于评论来说已经太长了。

Spring Security 附带的功能正是您所需要的:Domain Object Security or ACLs

这是一个相当高级的功能,因为如果需要添加一组表来表示用户对每个安全域对象的授权。一种用于对象类,一种用于对象本身(仅存储主键),另一种用于实际授权。其实可以看成是对共享文件系统的授权。

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

除了上面已经引用的 Spring Security 引用手册之外,您还可以在 krams::: Spring Security 3: Full ACL Tutorial 上找到有关 ACL 的完整教程。 .

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

关于java - Spring Security Role - 用户只能更改自己的数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26807867/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com