为什么说数据级权限和功能级权限道理是完全一样的?

花和尚鲁智深 发布于 2015/10/08 13:31
阅读 1K+
收藏 3
为什么说数据级权限和功能级权限道理是完全一样的?
我们很难划定出功能权限和数据权限之间明确的分界线,为什么?因为它俩其实差不多,它俩的理是完全一样的,它们只是所处的层次空间不一样。

一个系统功能(比如功能层的表示一个功能的一个Action方法(方法是函数的子类)在系统中也是对应有一条记录的(这条记录上记录的是该方法的声明信息和该方法在系统中所处的用于被索引或者叫查找用的空间位置信息其实是用于标识方法的标识值,方法标识其实就是以系统根为参照点时这个方法定义的程序所在的位置。标识是什么?标识是当地节点定义的用于区分和跟踪本节点内的资源每一种/个资源也是节点的在本节点这个本地具有唯一性的值,由根节点出发把沿途经过的节点的标识用“/”作为分割符连接起来就是url定位符,“位”是位置的意思,位置是空间的意思的路径部分)。将整个系统看作一个空间,类型节点是空间,类型节点表示的是由满足类型记录上的命题(类型是一个复合命题,这个复合命题由一簇字段命题的合取组成,每一个字段命题的意思是:在该类型的对象的这个字段相对位置处一定具有一个长度为这个值的空间单元,这个空间单元继续被划分为字节,字节又继续被划分为01的所有记录组成的集合,资源就是空间,数据就是空间,记录就是空间,对象就是空间,值就是空间),这条对应于功能的系统记录也是数据,这条数据跟一条产品记录那条数据没有任何差别,它们只是所处的基于某个选定的参照点而划分的层次不同,它们的形状完全的相同,它们是在分形。

用java书写的每一个方法在jvm里都是对应有一条记录的,但是那个记录的定义和管理不完全受我们控制,如何解释那条数据也不完全受我们控制,所以我们难以直接在jvm记录上扩展出个AcContent字段用来承载访问控制信息。但是我们又必须标识出(或基于命名约定或打注解,最好是注解上一个人类读不出信息的对人类来说无意义的标识从而防止人提出修改这个标识值的请求)系统中的功能层的功能,所以我们会往功能层的方法上打上注解,注解一个标识在上面然后在那个标识所标识的自定义的扩展记录上放置AcContent字段,在AcContent字段里书写访问控制策略。AcConentType和AcContent这两个字段中的内容可以是:javascript、xacml、acl set、等,或者是自定义的领域特定语言。

明确的识别出计算机中的空间和时间有利于激活我们的自我系统,有利于并用那对天造的左右脑。计算机的运行时就是这样一种景象:被cpu驱动的主体空间单元在客体空间中行走,主体搬离、携带、放置客体空间单元这样一种景象。那么访问控制所需要做的是:”谁?是否可以在什么地点(场所是比主体空间大的客体空间单元主体在它里面行走)?什么时间?对什么东西(比主体空间单元小的客体空间问题空间单元主体无需进入它里面去就能把它处理了。客体空间一共分两类:一类比主体空间的复杂度高,一类的复杂度小于等于主体空间单元的复杂度。处理比主体复杂的问题空间主体就进入它里面去,处理没主体空间复杂的问题空间主体就不用钻进去就能解决了)?干什么事情?“。当被cpu驱动的主体进入功能方法的时候,cpu先把主体放下(中断,把主体放置在方法的门口或者门内)然后转而进入当前这个功能方法上注解的对应的访问控制记录的AcContent位置去看一下里面有没有内容,如果AcContent中的值不是null的话就直接把AcContent中的值交给权限引擎去执行,权限引擎会立即返回一个值表示当前这个主体所进行的当前这个操作是:允许、不允许、还是权限引擎异常了?权限引擎只有唯一的用户接口方法:AcResult Permit(subject, action, object, environment),随时随地调用它它都会立即返回允许、不允许或者我异常了。

上面,我们描述的这些是算功能级权限还是算数据级权限呢?感觉称作功能级权限有道理,称作数据级权限也有道理,两者只是称呼不同,两种称呼下面描述的是同一个时空。

统一功能级权限和数据级权限:
一个功能指的是一种变换,“功能”就是“功”、“能”,可以认为指的是一种时空变换的物理概念,指的是一种“运动”(中文十分良好,不只是这一个词可以这么去理解出正确的本意,所有的中文词汇都可以这么理解,这么理解出来的都是极度正确的本意。节能、高效、持久约束着一切,时间越久远越符合构造定律,东方的知识树足够久远,东方知识树的良好程度可能会超出我们大多数人的想象,它的良好是默认的、缺省的、自动的良好,比西方人的那一套良好的多的多)。如果去除时间概念使变换不经历任何时间的话就是数学上所指的“函数”,就是“关系”,就是“映射”。
比如:public Result AddProduct(Product product)
这个方法(方法是函数的子集)指的是怎样的集合映射集合?是参数定义域到返回值值域的映射。如果给予某个用户执行这个方法的权限的话意思就是在说这个用户被允许可以携带任何Product类型的记录登上AddProduct这个轨道列车。Product这个入参是个类型,类型的本质之一就是指的集合。
可以认为功能级权限指的是控制到功能方法的声明对应的系统运行时记录这个级别,数据级权限可以认为指的是更进一步控制到方法的入参域和返回值域这个级别。同一个函数的定义域和值域对于不同的主体来说是不同的,或者换个说法:任何函数的入参列表中都缺省有个“主体”参数。任何函数任何方法的入参列表中都有个隐式的未明确提出的“主体”类型的参数。
函数的所有可能入参是一个很大的记录集合(空间),这个记录集合会被组织结构森林(组织结构不是组织机构,组织结构是class,组织机构是object)进行分层排布和组合,组织结构的每一个节点对应的又是每一个子集,节点有子节点,集合有子集,一直到具体基本类型的具体单个取值可以认为都是在组织结构树上的。函数的值域也一样。无论是功能级权限还是数据级权限都是控制组织结构,终极的组织结构是没有组织结构(没有组织结构这是不可能的,基本数据类型就是组织结构,一个01开关的本质也是一个组织结构节点)没有组织结构就一个值一个值的去控制权限。
加载中
1
anycmd
anycmd
加油!这样看待问题世界后就可以跨领域跨平台了。跨.net、java……跨windows、linux……
0
lxbzmy
lxbzmy

权限问题的解法是一样的,都是主体、实体、操作,复杂程度不一样。

对table操作和对一条记录操作的判断的复杂程度有显著区别。

如果没有delete table权限,只需判断是否在执行delete就可以。

如果没有delete data where id=1的权限,你就需要知道他是否真的在删除id=1。

delete data where id<100; 
delete data where id in (select id from other where id <2)




花和尚鲁智深
花和尚鲁智深
基于row的每一个单元格中可以取的值的值域,可以把每一个字段的每一个值域通过一棵组织结构树或者无层级的字典划分成一个个的子集。这些组织信息是存储在当地节点的父节点中的,所以往往说我们往往在进入那个row当地之前就已经知道了当前的主体是否具有权限了,只有极少数情况下会直到进入当地row的那个AcContent单元格后才能知道到底有没有权限。
花和尚鲁智深
花和尚鲁智深
row的访问控制信息在对应的AcContent单元格中。主体来到那个当地时才需要访问当地的AcContent,大部分权限可以在未进入当地之前通过计算就得到了明确的判定:允许、不允许。只有在进入当地空间之前判定的结果是“我不知道,请继续询问下级”时才会进入当地row的当地AcContent单元格。AcContent单元格中的内容和整个row一同读写。
花和尚鲁智深
花和尚鲁智深
table对应的是一个节点,每一个row是table节点的一个子节点。一个table下的所有的row组成一个集合,这个集合可以被根据每个field维度或者field组合维度划分出子集,根据需要可以提出任意的划分维度。每一级(每一层节点)的访问控制信息都是存储在当地的。
0
花和尚鲁智深
花和尚鲁智深
 末尾一段看起来没有结束,末尾一段说的太潦草不清不楚。 
0
insights
insights
太抽象,看不懂。。
返回顶部
顶部