Keycloak资源保护建议

3
我正在使用Spring Boot编写Web服务,并使用Keycloak保护应用程序。该应用程序将公开管理餐厅的API。
在Keycloak中,我有两个角色:管理员和经理。
拥有管理员角色的用户可以进行增删改查操作。同一公司拥有多个餐厅,每个餐厅都有一个经理。我希望具有经理角色的用户只能编辑他们的餐厅(即他们管理的餐厅)。
根据我对Keycloak文档的理解,我必须使用Resource和Permission,但是他们指出:
[]您还可以拥有一个名为“ Alice's Banking Account”的不同资源,它表示单个客户拥有的单个资源,它可以拥有自己的授权策略。
因此,我需要创建这样一个资源/api/restaurants/12345,但问题是我不能像这样硬编码ID。
目前,我在Spring Boot中保护了我的端点。
http
  .authorizeRequests()
  .mvcMatchers(HttpMethod.PUT, "/api/restaurants/*").hasAnyRole("ADMIN", "MANAGER")
  .anyRequest().permitAll();

这意味着任何餐厅的经理都可以编辑另一个餐厅。我想将其限制为仅限于他们管理的餐厅 (即他们所管理的餐厅)。如果可能的话,如何在Keycloak中实现?


为什么不能硬编码ID?每个餐厅都需要一个标识符。任何管理授权的系统都需要它。 - Codo
我希望用户能够在部署后添加餐厅。如果我硬编码它,这意味着创建餐厅后他们必须进入Keycloak并创建资源。我认为这可能会很复杂。这是常见做法吗? - Romuald Ouattara
1个回答

0
你所需要的是用户管理访问(UMA)。它允许管理每个资源的访问权限。
权限可以通过用户的身份验证进行管理。因此,如果用户进入新餐厅,您可以自动授予他访问权限,而无需涉及具有提升特权的过程。
最好的介绍可能是Photoz示例。它不是关于餐厅,而是关于照片相册。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接