撰文/ 齐咏珍
关键词Role based Access control(基于角色的访问控制)、XML
Application Dictionary(界面元素字典化)、资源、角色
本文向您讲述一个web应用系统中的基于RBAC模型的权限子系统的设计
实例。
一、引言
权限控制在任何一个多角色、不同功能分层次执行的应用中都是有其重要性。本文提供的权限设计实例是基于RBAC模型的,同时结合Application Dictionary 的概念,将应用系统的界面元素(菜单名称和层次关系等,即资源)都是存放在数据库表中,以实现权限子系统中的资源管理、角色管理、权限分配。
基于角色的访问控制设计灵活性大,易于维护;本设计实例以角色授权、用户指派角色的获得用户的权限为主;同时支持直接向用户授权,作为授权的补充形式存在。
二数据结构设计
本文的权限子系统包含三大实体:用户、角色、资源以及他们的关系。
通过用户角色表、授权表这两张中间表将三者的关联起来,如下图:
通过上图,我们可以看到,用户可以通过相关联的角色获得其可用资源,也可以直接通过授权表直接获得其可用资源,所以用户的所有可用资源就是两者的并集。在本系统中一个用户可以充当多个角色,一个角色可以使用多种资源。
三资源管理
1 资源实体:
依据资源使用的三大对象群,将资源分为系统资源、服务资源、基础资源三大类进行管理,其中系统资源只提供给后台管理员,服务资源提
供给授权用户使用,而基础资源提供给所有用户使用。
另外依据资源是否在用户的菜单中显示,将资源分为菜单资源和功
能性资源。
2 资源树结构:
由于树型结构的灵活性、可扩展性,所以采用以树型结构来管理本系统中三大类资源。
一级资源的定义:
当resourceID=parentID时,表示该资源为一级资源
叶子(资源)节点的定义:
当childNum=0时,表示该资源为叶子(资源)节点
资源树的表现
通过迭代递归的方法,将资源数据动态的转化为xml资源树,并将xml 数据以数据岛的方式内嵌在要展示的页面中,通过xsl转换程序将xml转化为可视树。
xml数据岛示例:
资源管理包括资源的新增、修改、删除。
其中删除只能删除叶子节点。
Delete from t_resource where resouceID=? and childNum=0
删除叶子的逻辑:
1 删除该叶子
2 删除成功,则更新父亲节点的孩子数设置childnum=childnum-1;
3 删除失败(包含影响函数为0),则不更新更新父亲节点
1授权
2.1 用户直接授权
1.2给角色授权
2.3 给用户分配角色
用户角色分配状况:
●普通会员的角色分配
●后台管理的角色分配
2.4会员的所有可用资源
5 会员权限的分配业务
5.1 给后台业务(管理)员的用户或角色分配资源:
可分配的资源为系统资源5.2 给普通会员的用户或角色分配资源:
可分配的资源为服务资源和基础资源,其中基础资源缺省就分配给普通用
户
5.3 当用户自己注册成为一个中华衣网时,此时用户拥有默认角色当系统管理员为用户创建用户时,此时该用户为产品包用户
当系统管理员将一个用户从未审核会员变成审核会员时,用户角色由默认角色省级为产品包用户,反之则用户角色由产品包用户降为默认角色
3 权限控制方法
6.1 对于受控的资源来说,首先拒绝匿名用户
6.2 对于登入用户来说,
6.2.1 请求中是否有资源的id,如果没有则拒绝
6.2.2 请求中资源的id,是否包含在用户的资源数组中,如果
没有则拒绝
6.2.3 请求的资源id对应的资源url,与请求中的资源url是否
保持一致,
如果不一致,则拒绝