春季:实体的角色,权限和许可

时间:2020-05-27 17:56:41

标签: java spring spring-security spring-data-jpa

下午好。 如何在一个应用程序中相对于特定实体(类似于RBAC / ABAC)的特定控制器为用户配置权限和角色,而无需使用不同的OAUTH2服务?

示例:

应用具有全局用户角色:ROLE_USER,ROLE_ADMIN

还有一个名为 Project 的实体。 USER可能是许多项目的成员。 有一些项目用户角色:PROJECT_ADMIN,PROJECT_EDITOR,PROJECT_USER 。 每个项目角色都可以拥有自己的权限(权限),例如将用户添加到项目中,编辑项目等。所有角色配置都存储在“ project_roles”和“ project_permissions”表中。

据我了解,可以通过PreAuthorize注释实现,但是当前的全局用户如何与项目角色匹配?

@PreAuthorize("@projectService.hasPermission('create_project', #projectEditRequest.id)") // How to pass GlobalUserID?
@PostMapping
public ProjectDto create(@RequestBody @Validated ProjectEditRequest projectEditRequest) {
   ...
   ...
}

也许有这种案例实施的例子?

谢谢!

模拟问题:

Spring boot security roles per entity

Roles connected with entities in Java Spring(无答案)

1 个答案:

答案 0 :(得分:0)

首先,OAuth2根本不是执行此操作的正确方法,因为您正在谈论的是基于实体的细粒度授权。可以使用Spring ACL之类的库来实现。然后,您的授权模型通常将与安全实体位于同一数据库中,并且Spring Security将通过ACL(访问控制列表)和当前Spring Security(用户)上下文授予请求的CRUD操作。

从OAuth2开始,您基本上只会将使用者/用户用作现有ACL条目的所有者。