【发布时间】:2020-04-25 21:10:32
【问题描述】:
要求:在User实体类中使用@JoinColumn注解创建表,包含user_id、authority_id(表示角色)、privilege_id等列。
条件:权限和权限也是一对多的关系。
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "pm_authority_privilege",
joinColumns = @JoinColumn(name = "authority_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "privilege_id", referencedColumnName = "id"))
private Set<Privilege> privileges = new HashSet<>();
根据上面的配置,我获得了权限作为权限 json 的一部分。
问题:如果我在“inverseJoinColumns”中取两个值,我很困惑什么应该是变量类型。
当我尝试使用以下方式做同样的事情时,它会给出事务对象的错误,因为特权存在于两个地方。
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "pm_user_authority_privilege",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = {
@JoinColumn(name = "authority_id", referencedColumnName = "id")
// @JoinColumn(name = "privilege_id", referencedColumnName = "id")
})
private Set<Authority> authorities = new HashSet<>();
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "pm_user_authority_privilege",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "privilege_id", referencedColumnName = "id"))
private Set<Privilege> privileges = new HashSet<>();
注意:有页面没有。角色和这些角色的所有相关权限。(使用问题中定义的代码处理)
然后我从中选择一些角色并在用户创建时保存它们。
{
"authorities": [
{
"authorityId": "ec071816-31e6-11ea-bae1-0242ac110005",
"authorityName": "MANAGER",
"description": null,
"privileges": [
{
"description": "",
"privilege": "CREATE_USER",
"privilegeId": "ba9a4952-4d53-42e9-94fe-8373d334819e"
},
{
"description": null,
"privilege": "SHOW_DATA",
"privilegeId": "ec06de1b-31e6-11ea-bae1-0242ac110005"
}
]
}
],
"email": "test@gmail.com",
"password": "test@123",
"phoneNo": "8575456595",
"status": true,
"userId": null,
"username": "test"
}
【问题讨论】:
-
将 JSON 添加到问题中
-
@Rohit 立即查看。
-
您需要从
User到Authority的OnetoMany关系以及从Authority到Privilege的另一个OnetoMany关系。 -
您的权限在权限上,而不是在用户上。
-
@Rohit 首先感谢您的回答。但是你建议我采用我已经这样做的方式。我的问题是我应该怎么做才能实现这种场景。简而言之,授权具有多种权限,但我们并未向我们提供选定的所有用户提供所有权限。而且用户和权限之间没有任何直接关系,这就是为什么我想在表'pm_user_authority_privilege'中绑定privilege_id
标签: spring spring-boot spring-security jwt