结构化资源的访问鉴权
概述
结构化资源是我们在实际生产中常见的一种资源组织方式,例如公司的文件/夹结构 、组织结构 都是属于结构化资源(见下图),各节点之间存在一种层级和关联关系。
文件夹结构是由文件夹、文件构成的标准的树型数据结构,树结构中的任意节点只能有一个父节点。
组织结构是由单位、部门、人员构成的一种具有上下层级的类似树型的数据结构,而在组织中人员可以同时隶属于多个部门或单位,这打破了树型结构的定义,形成一种被称为有向无环图(Directed Acyclic Graph,简称 DAG)的数据结构。
当一个有限权力的用户需要访问文件/夹或组织结构时,通常也只能看到部分节点显示,其他无权访问的节点则不能给用户呈现出来。这需要一种鉴权方法根据一定的策略可灵活配置用户的访问范围。由于每个用户的可访问范围不同,因此最终鉴权机制将针对每个用户的配置策略生成其特有的资源访问视图,简称为访问图。
以上面的结构图为实例,如果用户小明的配置策略为:
- 拒绝
小明访问办公软件文件夹 - 拒绝
小明查看市场部中的人员
则小明实际看到的访问图应该是:
通过上面的例子,我们对鉴权有了一个基本的了解,但实际生产环境下,情况要复杂的多,因此我们专门研究了一种访问鉴权机制来解决这个问题。由于树结构也是一种有向无环图(DAG),因此我们将解决DAG的访问鉴权作为实现目标,要求在具有上百万节点的DAG中通过策略快速生成访问图,海量节点和计算效率是重要的考虑因素,因为文件/夹结构可能会包含数百万个节点,而用户登录系统后肯定希望在最短的时间(2秒内)看到访问图。
鉴权过程
概念定义
完整图 是拥有完全节点的DAG,例如企业中需要共享的所有文件/夹结构,以及企业的完整组织架构。
访问图是用户可访问节点构成的DAG,可访问节点是基于完整图的基础上由访问鉴权机制根据策略计算得出。
访问图由允许节点、拒绝节点和桥节点构成:
允许节点 策略作用为允许的节点。
拒绝节点 策略作用为拒绝,且子孙中没有