J2EE
中的
用户权限模型
(RBAC)
的设计
本文的读者对象
假定您是一个开发人员,
并且有
J2EE
的开发经验,
同事对关系型数据库有一些了解,
你还必须了解一些关于
servlet
的
filter
的应用。
您是否经常在做同一个轮子
所有写过
B/S
应用的人,
都会遇到一个问题,
就是如何实现一个用户登录,
判断这个用户的权限是否可以做某一个操作,
再深入一点,
我们可以还要计算这个用户对一个事务的操作必须是在某一个范围里面,
譬如对用户的管理是只能管那些官职是处级干部等,
你是否在多个项目里面,
每次都碰到大体一致的需求,
而您还在每次都想设计出一个通用的用户模型?但是每次都不得不重新编码来适合一个新的项目奇怪的用户权限需求?
分析问题
我接下来以一个例子来说明这个模型的设计思想,假设我们在做一个学校的信息管理系统,我们的使用者有学生:祝英台(美术系)
和梁山伯(哲学系)
老师,
唐伯虎
(美术系)和秋香(哲学系)
还有两个系主任,
一个吴孟达(美术系系主任),
一个是周星星,还有一个校长(督学):周润发
,
还有一个学校信息中心的主任
就叫做张朝阳吧,
他最喜欢搞
IT
了。
假设:
对用用户权限这个“轮子”(因为我也在写已经很多前辈写过的文章)包含一下的东西:
用户
|
User
|
角色
|
Role
|
业务对象
|
Business
|
操作
|
Operator
|
范围
|
Score
|
用户就是我们的使用者:祝英台,梁山伯,唐伯虎,秋香,周星星等
角色就是系统里面设置一种岗位,
譬如例子里面的学生,
教师和系主任和校长
业务对象:如课程管理是一个业务对象
操作:
是指和一个业务对象有关系的操作,
(课程)查询(课程)增加,
(课程)删除等
范围:是最难的一个部分,
只得是具体的一个业务和操作所可以管辖的范围,
譬如对于吴孟达先生,
他是美术系系主任,
他可以操作美术系的课程,
他老人家可能最喜欢管理的是人体素描,
艺术人体摄影这些课程,
而周星星管理的是哲学,
他可以管马克思主义哲学,社会主义经济学等,
而周润发是个老江湖,
他什么都可以管。
好了,
我们
就课程内容管理来
列一张表描述一下权限
角色
|
权限
|
范围
|
学生
|
查看课程内容
|
自己选择的课程
|
教师
|
添加,删除,查看, 修改自己的课程
查看其他教师课程
|
自己教授的课程
|
系主任
|
添加,查看,删除 修改自己的课程
查看本系其他教师课程
查看其他系的课程
|
在本系是完全权限
|
校长(督学)
|
查看所有的课程
|
具有完全权限
|
管理员
|
查看所有的课程
|
具有完全权限
|
表格模型
l
User
用户信息存放,
主要是
UserId
和
password
l
Roles
角色信息
l
UserRole
用户属于什么角色,
一个用户可以是多个角色
l
Business
业务表
对应
RBAC
中的资源
l
Opeartions
操作表
l
Popedom
权限表
l
RolePopedom
角色具有什么权限的表格
这个表格中的
ScopString
记录了这个角色的默认范围
l
UserPopedomScope
:当一个用户的某一个权限,
偏离了角色的默认权限范围,
可以在这个地方进行定义
l
URLAccess
:对应的
Jsp
和
ServLet
的访问权限,
如果一个页面需要权限
Id=PId1
和
Id=Pid2
来访问,
则可以写成
Pid1&PId2
,
如果是
Pid1||Pid2
则标识主要其中一个权限即可。