下午好。 如何在一个应用程序中相对于特定实体(类似于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) {
...
...
}
也许有这种案例实施的例子?
谢谢!
模拟问题:
答案 0 :(得分:0)
首先,OAuth2根本不是执行此操作的正确方法,因为您正在谈论的是基于实体的细粒度授权。可以使用Spring ACL之类的库来实现。然后,您的授权模型通常将与安全实体位于同一数据库中,并且Spring Security将通过ACL(访问控制列表)和当前Spring Security(用户)上下文授予请求的CRUD操作。
从OAuth2开始,您基本上只会将使用者/用户用作现有ACL条目的所有者。