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