整体观:分拣集合的技术


每一个Catalog根节点定性了一棵树,有很多棵树。树上的节点可以到类型,到字段,到字段值域的某个区间,甚至最终到值域的某个取值(注意:这些在树上的节点叫做“实体”,而将树上的节点打在(赋值到)资源上去时叫做“值”,在图形化联想的时候想象为Catalog树上的节点(包括叶子)会发出很多条线,这些线连接了节点和打在资源记录上的值,之所以要想象这样的线的存在是因为我们后续要“提溜”它们)。

有了这片森林一切都有可能。这些来自于森林上的节点组成的多元组会在某个空间单元(比如一条数据库记录)中聚合在一起,我们专门为每一个资源记录都设计有Catalog字段。这个Ctalog字段比如是varchar(100)长度,我们可以制订并记录下Catalog字段的空间划分规则,我们将10棵树上的节点甚至20棵树上的节点聚集在这个Catalog字段空间内,我们对varchar(100)做规划,拆分为长度为1,2,4,8,16等相等或不等长度的区间,我们把来自于那片森林中的树上的节点对应的值放进这些空间单元中去。最终我们通过sql(非关系数据库也有类似的机制)截取这个Catalog字段的正确位置的正确单元来筛选结果集,和读取这个字段中正确位置的值把这个值传入制订的安全策略中去参与计算参与返回一个表示当前主体对当前资源记录是否有当前操作权限的结果。

Catalog字段是附加上去的,是专门为了将一个集合划分为具体的一个个子集而附加上去的字段。而那些固有的字段和这个Catalog字段中的各个子单元中的值本质意义上是没有任何差别的,那些具体类型资源上的固有字段和其中的值同样是来自于某棵树上的节点,只有在通过资源记录的固有字段不能筛选出想要的子集的时候才应去动用附加的Catalog字段。记录级权限其实跟功能级权限跟目录级权限都是相通的。目录可以很深很深,目录级权限靠近叶子那段就是记录级权限,靠近根那段就是功能级权限。它们本质上没有任何差别。

前面描述的那片森林和那个Catalog字段的原理是这样,意思就是说:我们建立些树,这些树通常在需要的时候正好在内存,我们为某些(或某个)主体把某些树上的某些节点插入到某些资源记录的Catalog字段中去,然后之后我们通过提溜这棵树上的这些节点所在的枝条来把那些资源记录从那个大集合中提出来。这可能就是数据库的词汇世界中的“索引”的意思。记录级和记录级往下更细致的权限我们都可以通过这种机制去建立树,把树枝插进去,然后拔出来。我们所做的这些事情都只是在空间维度上下的功夫,然后再加上时间(运动、变化)维度,反复灵活的使用这些技术就可以限定任何主体在任何时间任何空间干任何事情了(如果还要控制能干一“种”事情几次的话其实就是在资源记录节点上去生长出个用于存放干过了几次的空间节点)。这样就有办法办到“能看到小王和小利的数据,但是我看不到小明录入的数据”了。

不表达出来不太容易识别出那些好方法,表达的过程促使想办法去加工处理,加工处理的过程往往会出现新的收获。刚刚发现“穿针引线”这种方法。