这是花费了我半天时间从国标GBT 25062-2010 RBAC上整理得到的IRBACService接口。不要感觉惊奇,GBT 25062-2010 RBAC是和美国的NIST RBAC标准完全一样的。如果您希望阅读GBT 25062-2010 RBAC国标文档的话可以从这里下载http://git.oschina.net/anycmd/anycmd/tree/master/Docs。
国家标准文档是用z语言书写的,一下子读不懂没关系,不要灰心,把丢掉的知识拾起来就可以了。咱们都是在同样的教育体系下接收教育的,咱们的知识结构是被众多金字塔尖的人精心设计和建造的,只要你静下心来没有你阅读不懂的人类知识人类文明。
各种标准文档上书写着的是无数人的智慧与聪明才智。那是他们的价值、荣誉与生命,希望你撇开相互的偏见去获取你想要的知识。理论与生产没有矛盾。
为了帮助大家阅读,我斗胆预先帮助大家预热一下一些重要概念。
主体:指对客体有认识和实践能力的对象。比如人、系统、服务提供者、服务消费者。
客体:可被主体感知或想象到的任何事物。如文件、打印机、终端、数据库记录等。
对象/资源:资源是需要进行访问控制的系统资源,例如文件、打印机、终端、数据库记录等。
资源类型:基于人类发明的分类法对资源按照性质、特点、用途等作为区分的标准而做的第一次分类。
权限:对受保护的对象执行某个操作的许可。
操作:一个过程,这个过程通常有输入与输出,这个过程可能影响系统的状态也可能不影响系统的状态,是否影响系统的状态有赖于你的领域边界。首先基于资源类型定义一类资源的操作列表,通常这就够了,但也有可能会需要针对特定对象实例定义操作列表。
你也可以直接查看IRBACService.cs代码文件,它上面承载的是和下面的表格承载的同样的信息。
所有的RBAC标准接口都放进了一个类是希望把RBAC看成一个整体,不作根据自我理解而施加的分类。
接口的使用者可以根据自己的理解再对这套接口进行分类。比如接口的使用者可以把以上所有方法分类成User类、Role类、Privilege类等
为IRBACService的方法分类是一件困难的事情。因为可以基于很多观察角度进行分类,不同的观察角度对应不同的分类方式。比如可以按照RBAC标准上定义的“核心RBAC”、“层次RBAC”、“责任分离RBAC”分类,也可以按照方法的主要参与者是谁进行分类分类成User类、Role类、Privilege类、责任分离类等,还可以按照方法的功用分类成管理类、支持类、审计类。
作为一套稳定规范的编程接口anycmd选择不对RBAC方法进行分类,不分类可能是最好的分类,每一个方法都是一个元素,而元素方法是可以按照使用者的需求任意组合的。
会话
持久的UserSession与内存中的UserSession:持久UserSession是对内存中的UserSession的持久跟踪,是对实现会话级的动态责任分离特性的必要准备。
持久的UserSession是这样一个概念,一个账户在第一次登录的时候会建立一个内存中的UserSession,这个UserSession会被持久化起来。用户退出系统时
会更新持久的UserSession的IsAuthenticated为false但不会删除这条UserSession记录。用户下次登录的成功时IsAuthenticated会再次更新为true,
持久的UserSession只在用户登录和退出系统时访问,持久的UserSession的存在使得安全管理员可以持久跟踪用户会话从而有机会面向用户的UserSession建立用户会话级的动态责任分离策略和其它一些高级的操作。
一个账户可以对应多个UserSession,安全管理员可以控制哪个UserSession在什么情况下激活而哪些UserSession不能激活(比如为某个账户建立两个UserSession分别对这两个UserSession的激活角色施加影响从而使得两个UserSession具有不同的权限集,一个账户可以对应多个UserSession但通常只会激活一个UserSession,比如两个UserSession中的一个在早上8点到下午5点是可以激活的,而另一个在下午5点到第二天早上8点是可以激活的)。安全管理员可以为某个账户建立新的UserSession但不马上切换为它,安全管理员针对这个UserSession进行会话级的动态责任分离授权并测试符合预期后再禁用用户原来的UserSession切换为新的UserSession,
系统可以让UserSession被禁用的那个账户下线然后他再次登录就切换到新的UserSession了,系统也应该能做到在用户不知觉的情况下平滑的切换掉他的UserSession。
这是我目前对Rbac会话的理解
表格的格式混乱了已被删除
anycmd是一个.net平台的完全开源的,完整支持RBAC的,将会支持xacml的通用的权限框架、中间件、系统。
如果您感兴趣的话现在可以先观察Anycmd的源码,期待您为Anycmd.AC提供帮助确保她走在正确的道路上。
Anycmd的开源地址在http://git.oschina.net/anycmd/anycmd