[转]通用权限管理设计
[转]通用权限管理设计
[转]http://www.kanwenzhang.com/erp/fda6e89aec274a36/c/1979/11979.html
因做过些系统权限管理功能虽然逐步完善,但总有些不尽人意地方,总想抽个时间更好思考权限系统设计。
权限系统直以们应系统不缺少个部分,若每个应系统都重新系统权限进行设计,以满足不同系统户需求,浪费们不少宝贵时间,所以花时间设计个相通权限系统有意义。
二.设计目标
这个系统,们需系统所有资源进行权限控制,那么系统资源包括哪些呢?们以这些资源简单概括静态资源(功能操作、数据列)动态资源(数据),分别称象资源数据资源,们系统设计实现叫法。
系统目标就应系统所有象资源数据资源进行权限控制,比如应系统功能、各个界面、数据显示列以及各种行级数据进行权限操控。
1. 权限
系统管理
于面每个权限,又存两种,个只访问,另种授权,例如于“查看户”这个权限,如果户只被授予“访问”,那么就不能所具有这个权限分配给其人。
应系统具体操作,户以自己拥有权限信息,以归属于0~n个角色,属于0~n个组。权限集自身具有权限、所属各角色具有权限、所属各组具有权限合集。权限、角色、组间关系都nn关系。
3. 角色
许拥有相似权限户进行分类管理,定义角色概念,例如系统管理员、管理员、户、访客等角色。角色具有级关系,以形成树状视图,父级角色权限自身及所有子角色权限综合。父级角色户、父级角色组同理推。
4. 组
更好地管理户,户进行分组归类,简称户分组。组具有级关系,以形成树状视图。实际,们知道,组以具有自己角色信息、权限信息。这让想们QQ户群,个群以有个户,个户以加入个群。每个群具有自己权限信息。例如查看群共享。QQ群以具有自己角色信息,例如普通群、级群等。
有图以看出,这四关系复杂,而实际比这个图还复杂,权限、角色、组都具有级关系,权限管理应系统比较棘手问题,设计个通权限管理系统,工作量着实不。
当然于有些项目,权限问题并不那么复杂。有只需牵涉权限户两种类型象,只需给户分配权限即。
另些,引入角色象,例如基于角色权限系统, 只需给角色分配权限,户都隶属于角色,不需单独户分配角色信息。
理清象关系,让们接着进行数据库设计。数据库建模时,于NN 关系,般需加入个关联表表示关联两关系。步估计,本系统至少需十张表,分别:权限表、户表、角色表、组表、户权限关联表、 户角色关联表、角色权限关联表、组权限关联表、组角色关联表、户属组关联表。当然还能引出些相关表。面让们PowerDesigner画出各表吧。
权限管理设计篇(二)——数据库设计" src="http://img.kanwenzhang.com/images/t2/200907/20090707055803926.bmp">
字段名称 |
字段 |
类型 |
备注 |
记录标识 |
tu_id |
bigint |
pk, not null |
所属组织 |
to_id |
bigint |
fk, not null |
登录帐号 |
login_name |
varchar(64) |
not null |
password |
varchar(64) |
not null | |
vsername |
varchar(64) |
not null | |
手机号 |
mobile |
varchar(20) |
|
电子邮箱 |
|
varchar(64) |
|
创建时间 |
gen_time |
datetime |
not null |
登录时间 |
login_time |
datetime |
|
last_login_time |
datetime |
||
登录次数 |
count |
bigint |
not null |
2. 角色表
角色表(TRole) | |||
字段名称 |
字段 |
类型 |
备注 |
角色ID |
tr_id |
bigint |
pk, not null |
父级角色ID |
parent_tr_id |
bigint |
not null |
角色名称 |
role_name |
varchar(64) |
not null |
创建时间 |
gen_time |
datetime |
not null |
角色描述 |
description |
varchar(200) |
3. 权限表
权限表(TRight) | |||
字段名称 |
字段 |
类型 |
备注 |
权限ID |
tr_id |
bigint |
pk, not null |
父权限 |
parent_tr_id |
bigint |
not null |
权限名称 |
right_name |
varchar(64) |
not null |
权限描述 |
description |
varchar(200) |
4. 组表
组表(TGroup) | |||
字段名称 |
字段 |
类型 |
备注 |
组ID |
tg_id |
bigint |
pk, not null |
组名称 |
group_name |
varchar(64) |
not null |
父组 |
parent_tg_id |
bigint |
not null |
创建时间 |
gen_time |
datetime |
not null |
组描述 |
description |
varchar(200) |
5. 角色权限表
角色权限表(TRoleRightRelation) | |||
字段名称 |
字段 |
类型 |
备注 |
记录标识 |
trr_id |
bigint |
pk, not null |
角色 |
Role_id |
bigint |
fk, not null |
权限 |
right_id |
bigint |
fk, not null |
权限类型 |
right_type |
int |
6. 组权限表
组权限表(TGroupRightRelation) | |||
字段名称 |
字段 |
类型 |
备注 |
记录标识 |
tgr_id |
bigint |
pk, not null |
组 |
tg_id |
bigint |
fk, not null |
权限 |
tr_id |
bigint |
fk, not null |
权限类型 |
right_type |
int |
7. 组角色表
组角色表(TGroupRoleRelation) | |||
字段名称 |
字段 |
类型 |
备注 |
记录标识 |
tgr_id |
bigint |
pk, not null |
组 |
tg_id |
bigint |
fk, not null |
角色 |
tr_id |
bigint |
pk, not null |
字段名称 |
字段 |
类型 |
备注 |
记录标识 |
tur_id |
bigint |
pk, not null |
tu_id |
bigint |
fk, not null | |
权限 |
tr_id |
bigint |
fk, not null |
权限类型 |
right_type |
int |
字段名称 |
字段 |
类型 |
备注 |
记录标识 |
tur_id |
bigint |
pk, not null |
tu_id |
bigint |
fk, not null | |
角色 |
tr_id |
bigint |
fk, not null |
字段名称 |
字段 |
类型 |
备注 |
记录标识 |
tug_id |
bigint |
pk, not null |
tu_id |
bigint |
fk, not null | |
组 |
tg_id |
bigint |
fk, not null |
11. 组织表
组织表(TOrganization) | |||
字段名称 |
字段 |
类型 |
备注 |
组织id |
to_id |
bigint |
pk, not null |
父组 |
parent_to_id |
bigint |
not null |
组织名称 |
org_name |
varchar(64) |
not null |
创建时间 |
gen_time |
datetime |
not null |
组织描述 |
description |
varchar(200) |
12. 操作日志表
操作日志表(TLog) | |||
字段名称 |
字段 |
类型 |
备注 |
日志ID |
log_id |
bigint |
pk, not null |
操作类型 |
op_type |
int |
not null |
content |
varchar(200) |
not null | |
操作人 |
tu_id |
bigint |
fk, not null |
操作时间 |
gen_time |
datetime |
not null |