“角色”和“资源树”的正交关系

Role(角色)

角色表示能力,得到某个角色的账户具有了这个角色表示的能力,但是能力是作用在资源上的,主体只得到了能力还没有用,还得有资源,有施展能力的资源能力才有用。比如我们把所有的角色都给某个账户,都给这个账户也是没有用的,如果不让这个账户能够操作任何资源记录的话它有再多的角色也没用。 角色表示的是个功能集,得到某个角色的账户就得到了这个角色代表的功能,只是表示它有干某些种类的事情的能力了,可是我们不让它看到任何资源的话它的能力就没有施展的目标。比如一个账户具有了修改产品的价格的权限,产品上会有个Catalog属性,这个Catalog属性的取值来自于一棵树上的节点,比如来自一棵ProductCatalog树,我们不给这个账户的Privilege二元组集合添加任何(Account, ProductCatalog)类型的记录的话,这个账户是看不到任何产品记录的。

Catalog(目录)

Catalog模块是为了建立一片森林,每一个Catalog根节点都定性了一棵树,可以有ProductCatalog树、AccountCatalog树(也就是Organization,用户的组织结构),等各种各样的树,每棵树上取一个节点取若干棵树上的节点组成一个元组,这个元组可以标识出整个资源空间中的任何一个任何粒度的资源子集,然后我们把主体投放到具体的空间子集中去施展他/她的能力。 森林中的每一棵树上的节点所指代的都是整个资源集中的一个子集,我们通过这片森林可以把整个资源集划分成任意细致的子集。一直能划分到具体资源记录的具体单元格的具体值域的具体取值。 我们把这种由Catalog树划分的资源称作空间。使用这片森林来把整个资源空间集合划分成一个幂集。这样,由角色得到的功能集(能力集)和由Catalog得到的数据集是完全正交的,即使一个账户得到了所有的角色,但是如果没得到任何Catalog节点指代的资源的话也是啥了干不了的。 比如有5棵树组成的这片森林{tree1,tree2,tree3,tree4,tree5},我们从这5棵树上分别取一个节点组成这样一个5元组(tree1.Node001,tree2.Node01.02,tree3.01,tree4.10,tree5.node3)。这个5元组定位了资源空间中的一个子集,通过这样的5元组我们能够定位到整个资源空间的任意精细的子集,我们可以把给定的主体投放到那个空间中去,主体只有来到了具体的资源空间才能施展他的能力。即使一个主体拥有很多角色也没有用处的,因为他身上的那些能力只有在来到具体的空间中才会发挥作用的。试想一下一个会做饭的主体不在厨房没有油盐酱醋茶,一个会驾驶的主体没有车子 Catalog抽象了一切,Codespace、ResourceType、Field、值域、具体的值,都是Catalog森林上的节点。

站在主体的角度,万事万物皆分类

普通的分类只是对一个集合中的所有元素进行简单的单元划分,分成几个兄弟组,这些兄弟组下面不再继续分类。复杂的分类是那个Catalog(目录)树,复杂的分类才是棵树。简单的分类直接使用Dic和DicItem模型去表达就可以。普通的分类其实就是实体的属性。实体上的CategoryCode字段与实体的固有属性没有本质差别,只是CategoryCode这样的字段是系统附加给实体的字段,而固有属性是业务附加给实体的字段。实体的一个固有属性的本质也是一次分类,比如人的性别属性,取值为男、女、未知、未说明的意思就是把人按照性别分为4类。人的姓名也是分类,只不过这种分类的枚举值比性别要多的多。人的年龄也是分类,年龄分类的取值也很多。对于取值非常多的那些分类项通常人们引入计算逻辑,合理分配存储和计算。
[该贴被anycmd于2015-01-31 08:24修改过]

感慨前人的智慧。这里的“角色”可能正是jdon007和jdon前人们早就指认出的“四色”和“四象”中的角色。
一个用户主体登录进入一个系统时并非是所有的角色列表都会激活的,根据实地情况,正是在当前主体进入某个空间(场所、场景)后才会由当地的空间发出请求激活当前主体的某些角色的消息的。
主体、角色、时间、地点、客体

2015-01-31 09:20 "@anycmd"的内容
主体、角色、时间、地点、客体 ...

时间 == 运动
地点 + 客体 == 空间
地点:主体可以置身其中的空间集合。
客体:可以被主体置身其外而操作的空间集合。
主体是否可以置身入某个空间单元中去不是一锤定音的,比如资源记录上的字段,一个资源单元格是一个空间单元,这个单元格中的事物(客体)可以被主体置身其外而更改;而在这个单元格的父空间中,在资源记录这个空间中可能记录下了ModifiedByUserId这样的值表示这个主体来到过资源记录这个空间单元并干过什么,但是到底干了什么呢没人知道,要想知道的话就需要打开字段单元格了,就需要让主体可以进入具体的单元格了。

是空间激活了我们的角色,当我们步入商场时商场那个“场”激活了我们逛商场的角色,当我们进入一家店,那家店的“场”激活了我们“看衣服”的角色,我们为什么觉得那件衣服很不错?因为那件衣服的“场”激活了我们“试衣服”的角色……我们作为主体,我们本身也是“场”,这是一种主体与时空之间难以模状的变换,这是运动

如果有人出一套用于帮助开发的概念框架,它应该是类似于HTML + CSS + JavaScript的。我们提的所有概念都能在HTML + CSS + JavaScript身上找到对应。
比如那个Catalog到底是什么?可能就是HTML中的节点。html是棵树,每一个节点等同于一个Catalog Node,每一个节点表示的都是资源、是个空间单元。是集合的幂集,每一个单元中的值不仅仅只是单纯的“值”而且可以是那片森林(森林有根,根是www和业界标准的基本数据类型,www是静态树的根,基本数据类型是动态树的根)中任何一棵树上的任何一个节点的“标识符(或者叫定位符,指HTML的那个<a href=''>元素)”,如同我们的AcContentType字段和AcContent字段一样。我们使用文档对象模型建立的那棵树可以直接被映射为三维中的空间,把主体投放到空间中去,唯一能够改变静态的空间的事物是主体。最上层的主体是人类,在人类之上不容许再有主体,这是安全引擎的第一条军规。

有一片森林,那片森林中的树木安静祥和的生活在一起,我们每个人都是树上的一小簇节点,我们每个人都只是一小簇内聚的信息。那片森林有根,根是www和业界标准的基本数据类型,www是静态树的根,基本数据类型是动态树的根。
这片森林的安静祥和需要护林人员。
护林的那是上帝,不需要上帝,没有上帝,这片森林会自动愈合、自动维护
[该贴被anycmd于2015-02-01 13:51修改过]