返回博客

承包商分层分离

当多个方(员工、分包商,甚至是竞争对手承包商)共享一个平台时,每个方都需要查看自己的工作内容以及共享层。以下说明了如何通过两层授权机制来实现这一点。

authorizationmulti-tenantcontractor-separationsecurity

情况

许多组织运行着共享平台,多个参与方在这些平台上共同处理同一套资产数据。例如,一家公用事业公司内部的工作团队、一家总承包商以及两三家分包商都连接在同一个网络上;一个市政部门则由其自有员工和外部工程公司组成。这些彼此竞争的参与方,往往最终要在同一个应用程序中协同工作。

每个用户都需要一个登录名。登录名向系统表明其身份。此外,还需要明确第二点:每个人被允许查看的内容。

分离需要什么

在共享平台上进行分离需要具备四个特性。

**一个共享平台。**各方就大部分数据开展协作,基于这些数据编制报告,并在同一张地图上进行工作。仅对敏感部分进行隔离处理。

**源头管控。**受限记录保留在服务器上。浏览器、API 以及所有导出内容仅显示用户有权查看的内容。

规则集中管理。 只需设定一次规则,即可涵盖所有数据读取方式,包括后续添加的功能。

面向所有人的实时数据。 各方均基于实时记录开展工作。

Aptli 通过两层架构满足了这四点要求。

双层模型

我们的方法将授权分为两个相互独立的层,它们共同构成系统。

管理员权限具有开放性。 这些权限规定了用户可以执行哪些操作:创建工单、编辑报告、删除库存项目。没有管理员权限的用户只能查看其角色允许查看的数据。

**角色限制具有约束性。**每条限制都指定了一种记录类型(要素、工作单、报告)、该记录上的一个字段(标签、状态、类别)、一个比较条件以及一个值。 该角色的成员将被禁止对匹配的记录执行选定的操作(创建、读取、编辑、删除),且每条限制都以简明易懂的句子形式呈现。

这两层是独立运行的。一名现场工作人员可以拥有编辑报告的权限,而角色限制则会隐藏其他人的报告。管理员权限授予该能力,角色限制则缩小其适用范围。这种独立性确保了随着产品的发展,该模型依然稳健。

服务器端的执行

Aptli 在数据离开数据库之前,会在服务器端应用角色限制:

  • 该过滤器适用于所有数据读取方式:记录页面、列表、API、导出以及地图。
  • 若用户粘贴了其无权查看的记录 ID,将收到 404 未找到错误。
  • 他人分享的链接仅会打开该用户自身角色权限允许的内容。
  • 新功能会继承这些规则,因为它们通过相同的服务器数据层读取数据。

系统对每个请求都会回答一个问题:该记录是否符合规则?

具体示例

同一光纤建设项目中有两家承包商。两家都使用同一张地图和相同的共享底图,并分别针对各自的工作生成日志报告。每家承包商的要素都带有其专属标签:contractor-a 或 contractor-b。

创建一个名为承包商 A的角色,并设置一项限制:

  • 记录类型:要素
  • 字段:tags
  • 比较条件:是其中任意一个
  • 值:contractor-b
  • 受限操作:创建、读取、编辑、删除

“角色”窗口将其读作一句完整语句:“承包商 A”角色的成员可以执行所有操作,但无法创建、读取、编辑和删除标签为 contractor-b 的特征记录。 将该角色分配给承包商 A 的员工,并为 承包商 B 配置镜像,使用 contractor-a。这就是全部配置。

承包商A的施工团队现在可以看到自己的要素以及共享图层。要素列表中排除了承包商B的要素,CSV导出文件经过了筛选,而粘贴的ID会返回404未找到错误。承包商B看到的则是完全相反的情况。双方都能看到各自的工作内容、位置以及变更时间。

共享的基础设施(电缆线路、电线杆、管道基础设施)既不标有任何标签,也始终对双方可见。各方在需要时进行合作,在必须时保持独立。

当双方毫无共同点时

两个之间没有任何共同点、从未合作过、且因监管原因必须部署在物理上相互独立的基础设施上的各方,将各自运行独立的实例。Aptli 为每位客户运行一个实例和一个数据库,且每一方都可以拥有自己的实例和数据库。

测试方法很简单:那些使用相同基础层、相同报告和相同地图的各方应位于同一个平台上,并在服务器端强制实施隔离。

摘要

  • 在公用事业、电信和市政运营领域,多个主体(有时甚至是竞争对手)通常共享一个平台。
  • 通过登录凭证识别每位用户。第二层机制决定每位用户可查看的内容。
  • 实现权限分离需要一个共享平台、源头管控、集中管理的规则以及面向所有用户的实时数据。
  • Aptli 的两层机制包括管理权限(用户可执行的操作)和角色限制(用户被禁止访问的记录),并在服务器端实施。
  • 受限记录保留在服务器上,不会出现在列表、API、导出文件及复制粘贴的链接中。
  • 实际配置方案是:每位承包商拥有一个角色,该角色会限制另一方的标签访问权限,同时双方均可查看共享层的内容。
  • 对于没有任何数据共享需求且需要独立基础设施的各方,则应使用独立的实例。