Domain driven design DDD用户域特定设置

Domain driven design DDD用户域特定设置,domain-driven-design,microservices,Domain Driven Design,Microservices,我目前正在开发负责身份验证的微服务(负责身份和权限的有限上下文)。我们有基于用户角色的特定设置,这些角色绑定到另一个域,但用于生成令牌 (类似这样的) 例如 role_can_write_booking: true, fetch_products_type : "all/forUsersCompanyOnly" 等等 我应该将此信息作为身份BC的一部分保留,还是每个域都应该将其作为设置的一部分保留。 例子: role\u can\u write\u booking:truein booking

我目前正在开发负责身份验证的微服务(负责身份和权限的有限上下文)。我们有基于用户角色的特定设置,这些角色绑定到另一个域,但用于生成令牌

(类似这样的)

例如

role_can_write_booking: true,
fetch_products_type : "all/forUsersCompanyOnly"
等等

我应该将此信息作为身份BC的一部分保留,还是每个域都应该将其作为设置的一部分保留。 例子:
role\u can\u write\u booking:true
in booking Bounded Context,
fetch\u products\u type:“all/forUsersCompanyOnly”
内部预订产品绑定上下文

视情况而定。这两种方式都有权衡。如果您将所有信息存储在标识上下文中,那么它需要了解所有其他上下文,并且需要在任何上下文中更改某些权限或访问规则时进行更改。如果每个上下文管理自己的权限规则,那么它们只需要了解自己

你还需要考虑事物是如何被管理的。是否有集中管理角色和权限的概念

它还取决于角色需要的过程或细粒度,以及域在身份/角色/权限等方面的复杂性


如果您有非常细粒度的角色(即“管理员”、“用户”),那么我可能会做一些类似的事情,让标识上下文管理用户帐户和角色,但将权限方面的事情留给每个单独的上下文。即“这是一个角色为X和Y的经过身份验证的用户”,然后每个单独的上下文确定这允许什么。

只是好奇。。。您是否有许多跨越多个有界上下文的角色?你能举一个这样一个角色的例子吗?根据我的经验,每个子域的通用语言都倾向于定义自己的角色/角色名称。@guillaume31每个有界上下文都将提供一种功能,如会计、预订、产品等。其中一个例子是,我们将能够有负责预订的代理。有些人可能可以访问预订和产品等。从全球范围来看,他们都是代理,但在普遍存在的语言中,一个是BookingAgent,一个是ProductAgent。他们中的一些人将能够只读,一些人将能够编辑etcno,但无法提供比[Booking+Products responsible]更精确的角色名称,例如,我觉得[预订+产品负责]有点异味。如果角色真的是按BC分配的呢?再说一次,我不在你的范围内。@guillaume31我们的想法是让我们的客户有灵活性。我公司可能有一名员工负责预订和产品管理。他将是Booking BC中的BookingAgent,ProductManager是products BC中的ProductManager,但同样,另一个客户可能会决定他的公司在我们的系统中的ProductManager将能够创建产品,但不能删除它们,这代表了不同的权限集。我并不质疑是否需要自定义角色。问题是,在您刚才给出的两个示例中,我只能看到产品权限,而不能看到预订权限,这可能表明您的角色是每个BC的,而不是跨BC的(因此我的原始问题)。严格地在有限的上下文范围内定义和存储角色可以很好地解决大部分问题,因为用户不会试图创建胖的、包罗万象的角色。