我在Spring Boot中编写Web服务,并使用Keycloak保护应用程序。该应用程序将公开API以管理餐厅。
在 Keycloak 中,我有两个角色: admin 和 manager 。
具有 admin 角色的用户可以CRUD餐厅。同一家公司有多个餐厅,每个餐厅都有一个经理。 我希望具有管理员角色的用户只能编辑自己的餐馆(他们管理的餐馆)。
根据我对Keycloak文档的理解,我必须使用具有 Permission 的资源,但他们指出:
[]您还可以拥有一个名为Alice's Banking Account的不同资源,该资源代表单个客户拥有的单个资源,并且可以具有自己的一组授权策略。
为此,我必须创建一个类似/api/restaurants/12345
的资源,但事实是我无法对这样的ID进行硬编码。
现在,我在春季启动时像这样保护了端点:
http
.authorizeRequests()
.mvcMatchers(HttpMethod.PUT, "/api/restaurants/*").hasAnyRole("ADMIN", "MANAGER")
.anyRequest().permitAll();
这意味着任何餐厅的任何经理都可以编辑另一餐厅。我只想将其限制为他们的餐厅(他们管理的餐厅)。 如何在Keycloak中做到这一点?
答案 0 :(得分:0)
您要寻找的是User managed access (UMA)。它允许管理每个资源的访问权限。
可以使用用户的身份验证来管理权限。因此,如果用户进入新餐厅,您可以自动授予访问权限,而无需涉及特权提升的过程。
最好的介绍可能是Photoz example。而不是餐厅,它是关于相册的。