怎么样实现基于Web的权限管理框架功能?
基于Web的权限管理框架功能规格说明书
研究开发中心 邵正军
修订历史纪录:
名词解释:
Web应用程序:Web Application,又简称Web应用、Web-App。
最终用户:最终使用Web应用程序的用户,包括系统管理员、普通用户。
CSS:HTML页面上用它来控制显示样式,以达到样式和内容分离的效果。
1 前言
本产品是个权限管理框架,为Web应用程序的权限管理提供基础设施和框架。
任凭人们发挥怎样的想象力,目前这份规格说明书都不是完整的,所有措辞都需要经过多次修订才能最后定稿。
本说明书描述的是完全从用户(是指本框架的用户,包括Web-App开发者、最终用户)的视角看产品如何工作的内容。它不关心产品内部如何实现,它谈论的是功能特性。在这里给出屏幕图形与布局仅仅是为了演示背后蕴含的功能性,实际的外观与感觉(look and feel)将根据图形设计人员的输入与用户反馈随时间不断加以改进。
2 背景
你是否有过需要为一个应用程序创建登录验证和授权机制的经历呢?如果你是一个比较有经验的程序员,那你一定有过,而且可能不止一次了。那么,再回想看看,是不是会感觉每一次的新实现都好像似曾相识、可是又与以前不完全一样?唔,这正是我们要思考的地方,为什么我们要一再地重复自己?
3 目标
我们的目标是产出一个基于Web的通用权限管理框架(以下简称权限框架/框架),供Browser/Server结构的Web应用程序(以下简称Web应用/Web-App)使用,免去每个项目重复从头开发权限管理功能的痛苦,提高生产力。
4 范围界定
权限框架用Java语言实现。如果你想在J2EE多层结构中寻找它的位置,那你到Web层去找就对了,它的定位就在Web层。
它需要运行在Servlet2.3/JSP1.2(or later)规范兼容的Web server(譬如Tomcat4.1.x or later)中,为Web-App的权限管理提供基础设施和框架。
本框架立足于满足大部分情况下粗粒度权限控制的需要,譬如系统功能(菜单、按钮等)的访问控制。对常见通用权限管理行为(譬如用户/角色信息维护、菜单/按钮的访问权限许可等)提供必要的缺省实现,也提供途径给Web应用开发者覆盖这些缺省实现;
对于细粒度的权限控制,譬如种种业务层面上的权限管理要求,由于权限框架无法预知也不能做任何假定,所以这也是框架实现难点所在。本框架的解决方案是以API的形式提供扩展点,Web应用开发者在扩展点上插入满足自己业务规则要求的权限许可模块即可。由于外部扩展也是建立在权限框架的游戏规则上的,所以就保证了整个Web应用的权限管理都是在协调一致的机制下进行。
5 权限模型
解决复杂的权限管理问题的过程可以抽象概括为:判断【Who是否可以对What进行How的访问操作(Operator)】这个逻辑表达式的值是否为True的求解过程。这里涉及的相关概念说明如下:
l Who:权限的拥有者或主体。典型的有Principal、User、Group、Role、Actor等等。本框架的访问控制方法会采用“基于角色的访问控制(主,公认的有效方法) + 针对个别用户的访问控制(辅,增加灵活性) + 用户组”(这一点参见[访问控制方法的考虑]一节),所以直接跟授权有关系的实体就只有角色(Role)和用户(User)。譬如:业务经理(Role),张三(User)
l What:权限针对的资源(Resource)(包括资源类别(the type of Resource)和资源实例(the instance of Resource))。譬如:报表。
l How:亦作action,表示某种访问方法(亦请参考Operator条目解释)。譬如:删除。
l Operator:操作。表示施加于What的How动作。是一种Resource Related的概念,单独的How动作是没有实际意义的,譬如:删除;只有与具体资源结合在一起才有意义,譬如:删除报表。
访问控制方法的考虑:
5.1 基于角色的访问控制
基于角色的访问控制(RBAC)是目前公认的解决企业级的统一资源访问控制的有效方法。其显著的两大特征是:
1. 减小授权管理的复杂性,降低管理开销。
2. 灵活地支持企业的安全策略,并对企业的变化有很大的伸缩性。
概念示意图:
说明:
这种方法中,角色(Role)权限分配的单位与载体。权限不考虑分配给特定的用户。相对于基于用户(User)的访问控制来讲,角色的数量比用户总是少得多,因此极大地降低了系统管理员授权管理的复杂性。同时一个用户可以身兼多个角色,给安全策略带来了很大的灵活性和伸缩性。
对一个具体用户来讲,他拥有的权限是:对该用户身兼的角色(可能是多个)授予的权限的并集(Union)。
本文地址:http://www.45fan.com/dnjc/67770.html