关于RBAC模型的扩展点

    在项目开发中,往往需要涉及到权限模型的问题,现在比较流行的设计方案是RBAC3模型,园子里有很多关于这方面的文章,我这里就不多写了。为了使权限系统更加通用,减少开发人员在项目开发过程中的重复劳动,我想实现一个比较通用的权限系统,提供接口和扩展点方便程序员使用。网上有不少关于这方面的开源系统,在看了几个系统后,想对一般的RBAC3模型提出一些扩展点,不知道是否可行,请大家指点!

    1、用户组授权功能。

    2、角色类型功能。这个功能并不是很重要,建立一个类型表,每个角色可以归属一个角色类型,便于表达方便,层次清晰,这个功能主要的作用在于表示层的显示上。

    3、角色优先功能。可以定义一个优先级别表,给每个角色赋予优先级别,在处理角色的请求时,根据角色的优先级别排入链表里进行处理,链表里的角色请求可以根据优先级别的不同动态调整,系统在处理角色请求时,每次都从队首取一个角色请求,再将队首指针指向下一个角色请求。

    4、角色生存周期功能。这个功能可以指定角色的生存时间,时间可以是用户指定的,也可以是根据某个条件来决定的。

    5、角色根据责任链动态变更权限功能。在一个责任链里,一个客户程序发出请求,这个请求将沿着责任链进行传递,责任链里的每个结点将依次处理该请求,如果结点不能处理该请求,则将此请求转发到责任链的下一结点上;或者是,责任链中的每一个结点都对该请求进行处理。在处理的过程中,角色的权限将根据需求动态变化。

    6、角色根据状态动态变更权限功能。在应用程序中可能存在多种状态,比如在一个字处理程序中,当文件状态是只读时,和文件状态在可读可写时,它的功能是不一样的,那么角色需要根据这种状态的变更而动态变更权限集,以便适应这种应用程序的要求。

    程序的实现(应该有漏洞,还没有完全想好,请指正):

    客户程序启动后,便将权限框架核心态装入内存,并且只产生一个实例以节约内存。核心中维持每个用户的Session,其内容包含角色类型、角色优先级别、角色生存周期、程序状态、权限表、其中权限表根据其它条件的变化而不同,用户每次使用资源均需要访问权限框架中的权限表。当程序状态改变时,程序需要通知框架,框架根据此变化再根据其它信息(从数据库中读取不同状态时不同权限的信息,以及角色类型、角色优先、角色生存周期等)改变权限表,此时用户读取权限表,便可以实现权限的不同。

    权限的读取:

    使用.Net中的Attribute功能读取权限,或者是根据XML配置权限。实现两种读取权限的方法,便于用户选择使用。读取引擎通过读取客户程序中的特性或者配置文件,得到客户程序的结构框架,根据结构框架生成权限信息写进数据库。

    实现要点:

    使用Web Service提供服务,使同构或者异构系统均能使用权限系统。权限框架的接口一定要使客户程序方便调用,框架核心程序一定要精简高效,核心程序实际上是在UI层与业务层中起穿针引线的作用,该处使用AOP模式实现。

    以上几点在匆忙中想出,我对RBAC3模型的认识也不是很深刻,所以应该存在不少漏洞,恳请朋友们来拍砖,我好改进,谢谢:)

 

posted @ 2007-03-21 20:54  惘思  阅读(3348)  评论(1编辑  收藏  举报