【问题标题】:Permissions specific to a microservice特定于微服务的权限
【发布时间】:2021-02-04 02:31:34
【问题描述】:

关于特定于微服务的权限的最佳做法是什么?

想象一个有多个员工和多个产品的系统

每个员工都被分配到一些具有角色的产品(针对该产品):

  • 员工-A |产品-A |可以查看
  • 员工-B |产品-A |可以订购

...

  • 员工-A |产品-B |可以订购

...

这些信息属于产品和订单微服务(非规范化),还是属于用户声明。

【问题讨论】:

  • 我认为这里的关键是要知道我们在说什么。我们是在谈论用户的权限、员工的权限还是产品的权限?通过遵循所说的语言,您应该能够选择最合理的位置来放置它们。请记住,没有一种建模方法是最好的,有些方法对您的情况更有用。

标签: architecture microservices domain-driven-design


【解决方案1】:

依赖于特定于有界上下文/微服务的数据的权限不会成为典型身份和访问管理 (IAM) 的一部分,因为在 IAM 级别上,您正在处理权限->角色->用户。

在您的 IAM 中使用通用权限来表示特定于您的 BC 的数据并非不可想象,但这将是一个设计决策。例如,我喜欢使用 URI 来表示权限,所以我会使用 bounded-context://feature/action 之类的东西。例如,您可以使用 bounded-context://data-id 作为唯一标识符。对于身份字段之类的内容,您可能拥有bounded-context://source/data-id。使用 id 可能很笨拙;尽管可以通过构建管理这些的前端来缓解这种情况。拥有太多权限本身也可能并不理想,但同样,这将是一个设计决策。

另一种选择是管理 BC 本身中的数据访问,尽管这意味着构建一个特定于 BC 的访问管理系统......通用解决方案可能对此更好,但可能仍然“存在”在 BC 空间中,而不是而不是可能是企业范围的 IAM 空间。

【讨论】:

    【解决方案2】:

    标准基于角色的访问控制 (RBAC)。

    员工(主体)具有与一组权限相关联的角色,产品(实体)具有读取/编辑的权限要求。

    示例:John 具有 ProductA-sales 角色,其中包含 ProductA_Reader 权限。产品 A 需要 ProductA_Reader 权限。

    如果您实际上没有角色,这有点多余,并且每个组合都是唯一的......此时我会跳过“角色”概念,而只是有一个带有 userId->Permission 映射的表。但是大多数问题空间都有预定义的角色,这些角色将它们分组并允许它们被重用。

    无论如何,产品都有权限要求,用户有权限列表,产品服务需要检查用户的权限列表才能允许活动继续进行。

    【讨论】:

      猜你喜欢
      • 2021-07-07
      • 2021-11-29
      • 2019-09-20
      • 2017-02-14
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 2017-04-28
      • 1970-01-01
      相关资源
      最近更新 更多