IIUC 可以根据您想要执行的 KeyCloak 集成级别使用不同的方法来实现此场景。让我试着表达一种这样的方式。这很可能不是最理想的,但是您可以将其用作起点。
首先,Dealership 可以被视为租户分隔符,因此可以将单个 Dealership 中的用户聚集到 KeyCloak Realm 1中。Realm 将用户分组在一起,听起来 Dealership 就是这样的分隔符(如果确实允许用户通过相同的用户配置文件访问不同的 Dealership,则不能应用这种分隔)。
关于角色,在一种方法中,每个经销商、供应商、部门角色(管理员、销售、会计等)都可以是领域角色2。这些是特定经销商中用户可用的角色。但是,我想不出一种 KeyCloak 本地方式来区分经销商角色、供应商角色和部门角色。这些可以通过命名标准来区分(例如:)vendor-admin
?
在另一种方法中,每个实体(经销商、供应商、部门)也可以是具有自己的属性和角色的组 [3]。一个优点可能是实体之间的关系可以在组-子组关系中复制。
部门组的样本组层次结构
属性
这可以让您开始对 KeyCloak 中的实体进行建模。
在授权方面,您似乎可以使用 KeyCloak [4] 中提供的授权服务。我没有亲自使用过这个特性,但如果你想依赖 KeyCloak 作为 PAP、PDP 和 PEP [5],这看起来是可行的方法。
例如,可以授予或拒绝用户访问特定供应商或部门的资源,因为用户信息包含用户的组关系。这似乎可以通过基于组的策略 [6] 实现。
为了更直接地回答问题,
用户创建过程应确保建立正确的角色和(或)组关联
资源似乎是每种实体类型提供的服务(例如:add_vendor()
、、view_accounts()
)
希望这有助于进行设计。由于目前大多数细节尚不清楚,因此必须根据未来的需求重新设计设计,但至少有一个模型来验证您将能够做得更好。
1 - https://www.keycloak.org/docs/6.0/server_admin/#core-concepts-and-terms#realms
2 - https://www.keycloak.org/docs/6.0/server_admin/#realm-roles
[3] - https://www.keycloak.org/docs/6.0/server_admin/#groups
[4] - https://www.keycloak.org/docs/5.0/authorization_services/
[5] - https://www.keycloak.org/docs/5.0/authorization_services/#_overview_architecture
[6] - https://www.keycloak.org/docs/5.0/authorization_services/#_policy_group