权限引擎,可以怎么和认证框架结合不?

权限引擎,可以怎么和认证框架结合不?

可以和认证框架结合,权限引擎中应该有个SignIn接口,业务系统通过这个入口向权限引擎(权限引擎嵌入在业务系统进程内运行)传入用户名和密码来登录权限引擎,这是“验证用户的身份并进入权限引擎”的意思。应该也提供“不验证用户身份直接进入权限引擎的入口”,就是说权限引擎不要业务系统提供用户名和密码了而是由业务系统直接将代表当前用户的数据送入权限引擎中去。

认证框架所干的事情是解决“谁?什么时间?什么空间?什么事情?什么输入?什么输出?”中的第一个问号,解决“谁”的问题。由于权限引擎干事情时第一步就要问当前活动的用户是“谁”容易让人误以为“身份认证”也需要权限引擎来做。

比如业务系统传给权限引擎一个Dictionary<string, object>类型的对象表示当前登录的用户,这个字典中约定了LoginName、AccountId,LastLoginOn(DateTime),LoginOn等主体类别的基本信息放在Dictioanry(或者叫HashTable)的什么键什么桶中。还可以做一个这样的约定,常用的信息应由业务系统通过这个字典承载后直接传入权限引擎中,当权限引擎工作时需要访问当前用户的信息的时候应首先到这个字典中去查找,只有找不到对应键的信息时才应通过权限引擎配置的数据访问通道再到用户所在的数据库去查找信息再放入桶中。

通常情况下权限引擎事先并不知道鉴权时需要用到哪些信息。比如权限引擎工作时,根据资源的AcContent中的js中的或者xacml书写的安全策略的内容,AcContent中的安全策略执行时可能需要访问当前用户的“性别”属性,可是当前用户进入权限引擎时传入的字典中不一定有Key为Gender的项,于是权限引擎读取代表当前用户的那个Dictionary<string, object>对象中的key为“AccountId“的值并用此值去数据库中查找当前用户的Gender值然后再放入这个字典中。

这个Dictionary<string, object>字典往往就是技术框架中对应当前用户的那个Session对象,因为权限引擎是跟对应的技术框架运行在一起的,直接用那个Session就行。但是也可能有必要由权限引擎自己去维护出一套专用于访问控制的Session从而和具体的技术设施隔离开权限引擎就更通用了。权限引擎中也有一套Session管理机制,即时发布订阅或者周期监控和发现不再使用的Session数据并回收掉。

大方向应该不错,这样走下去,可以优化的地方还有很多并一一显露出来了。比如第一个用户第一次进入权限引擎的时候权限引擎并不清楚后续对用户的活动进行鉴权的时候可能会用到哪些信息,比如并不知道会用到用户的性别字段的值,可是第二次时权限引擎就可能知道了。因为权限引擎可以动态的识别出来并缓存一套元数据,下次再有用户进来的时候权限引擎可能就会一次性的把对这个用户的后续活动鉴权时可能用到的数据提前成批加载进内存了不用每次用到时再去加载了。

认证框架所干的事情是解决“谁?什么时间?什么空间?什么事情?什么输入?什么输出?”中的第一个问号,解决“谁”的问题。
什么空间=>这里的空间概念非常广泛,主要分两类,一类是用户本神所处的物理空间数据,一类是用户的分神所处的网络空间数据。用户本神的空间属性在“谁”的属性中携带,用户分神的网络空间属性指的是我们的各种各样的业务系统中的空间。指的是程序代码堆砌出来的那个树形的集合(即空间),指的是用户的分神在我们的系统树中所处的位置,因为用户的分神是在我们的系统树(空间)中行走的。系统内的空间和系统外的空间都需要,因为用户书写的安全策略上的内容可能是“如果当前请求用户在家则不允许干当前这件事情,如果在公司则允许干当前这件事情”,这样的安全策略就需要我们识别出用户本神所处的现实物理空间了。

“谁?什么时间?什么空间?什么事情?什么输入?什么输出?”分别对应:
谁=>主体;

什么时间=>指定的唯一的时钟的当前时间取值,代表宇宙系统的当前状态,所有系统都处在宇宙系统之内,所有局部系统内的时间都与宇宙时间换算一致,用人们总结的相对论那样的公式去换算(北京时间,或者各种各样的可以换算为北京时间的时间)。

什么事情=>指运动的种类,只有主体可以在系统内走来走去把系统内的空间单元搬来搬去,有各种各样的搬动空间的办法,这里的“什么事情”指的是办法的种类,叫什么种类的事情更合适,这个种类是由业务系统划分的,是业务系统对自己本地的各种各样的运动进行的分类。

什么输入=>“什么事情”的入参;

什么输出=>"什么事情"的返回值;

运行景象
访问控制是自然进行的,比如小明在公司楼下买烟,没钱买不了,钱不够买不了,把这说成业务行,说成是权限也行,没有啥区别。这就是一种运动,是系统内的一种运动定律,钱进来了烟出去了,钱没进来烟不能出去。烟是客体,烟不能动,只有主体可以搬动它,买烟涉及到两个主体,一个是卖烟的销售员一个是买烟的小明,小明把钱搬动到销售员手里,销售员把烟搬动到小明手里,只有这两个主体在携带着客体运动,客体自己并没有主动运动。客体是资源,资源是空间,主体也是资源也是空间,但是是有主观能动性的空间,只有主体可以在系统内根据自己的当前状态或者叫意愿行走,除了主体外谁也不能行走。小明为什么下楼买烟?因为他的状态变了他的烟抽完了,因为他是烟民。

信仰
每一件事情都是有理由的都是有因果的,量子力学是错误的,世界不可能没有因果。比如如果按照这个人的认知出发的话量子力学就是假的。

// 作者在jdon里,上图是在追溯jdon中的帖子的时候,在回帖中发现了个导向douban的连接,顺着偶遇的。作者在jdon中,id忘了,在下面的回复中追贴上。
后果
运动如果没能按照运动定律规定的那样完成,是可以自动倒回去的,比如运动定律说了“进来14块钱可以出去一包A型黄金叶”,结果由于售货员的错误导致错误的拿了一盒20元的B型黄金叶给顾客。这在现实世界中会发生,这不会引起太大的问题,因为10秒钟后售货员发现了这件事情,找到那个没走远的顾客换了回来。如果没倒回来也没有什么大不了的,售货员是智能的系统,下次卖货时他自己会小心一点的。智能的售货员单元会自我改善自己,如果他实在无法自我改善,如果他经常发生别人给14块钱而换给别人20块钱的烟这种事情的话,经常发生而不自我改善的话系统会帮他改善的,他可能会破产,他可能被系统淘汰掉。人工智能机器学习可能就是类似上面那样这样的算法,强化好的单元大规模复制好的单元淘汰掉不好的单元,到底是不是这样的我不清楚,目前只处在想象和听说阶段。

看来作者是js高手