您的位置:首页 > 数据库

用户权限设计(四)--数据库设计

2007-08-30 12:59 281 查看
通过二,三两步的理解,相信这篇文章就不会生涩了!~

首先上文权限设计拙见(1)中只是想记录下自己权限设计上的一点看法,以及将自己日常最常用的权限解决方案记录下来以供日后回顾,没想到有朋友关注此类的设计,那就只能先把代码拿出来献丑了,抛砖引玉,大家共同探讨学习(

6 pk_id NUMBER not null,

7 name VARCHAR2(20),

8 sex BOOLEAN,

9 age int,

10 emp_num NUMBER,

11 polity int,

12 unit VARCHAR2(50),

13 department VARCHAR2(20),

14 specialty int,

15 position VARCHAR2(10),

16 offtel VARCHAR2(20),

17 famtel VARCHAR2(20),

18 post_state VARCHAR2(10),

19 remark VARCHAR2(100),

20 constraint PK_T_USERINFO primary key (pk_id)

21);
实战经验:用户表就不多说了,都是一些常用字段,年龄、电话、职位等,建议大家建立一个通用一些,字段多一些的一个用户表,便于以后扩展,以后如果有特殊需求,不用扩这个基本表,可以通过主外键关系来新建一个表,用于扩充字段

角色表(T_RoleInfo):

1create table T_RoleInfo

5(

6 pk_id number not null,

7 role_name VARCHAR2(20),

8 role_desc VARCHAR2(100),

9 parent_role_id NUMBER,

10 constraint PK_T_ROLEINFO primary key (pk_id)

11);
角色表中需要说明的就一个parent_role_id父角色id,此字段用来扩展角色的继承关系。

资源表(T_ResourceInfo):

1create table T_ResourceInfo

5(

6 pk_id NUMBER not null,

7 module_name VARCHAR2(20),

8 module_code VARCHAR2(10),

9 module_desc VARCHAR2(100),

10 privilege_name VARCHAR2(10),

11 privilege_code CHAR,

12 privilege_desc VARCHAR2(100),

13 constraint PK_T_RESOURCEINFO primary key (pk_id)

14);

15
这个表需要说明的就比较多了,首先该表用来记录资源与资源权限,我这边所谓的资源就是实体,就是数据库表,角色需要对应到资源,有些角色对该资源有权限,有些角色则对该资源无权限,角色可对此资源操作的权限也不同。说白了,就是不同的角色对不同的数据库表的操作权限不同。因此我们这里的资源就是数据库表。

module_name:资源名;module_code:资源代码(存放数据库表名);

privilege_name:权限名;privilege_code:权限代码(代表权限的code,也就是我们上文所说的权值)

例如角色a对数据库表T_UserInfo有添加与删除的权限则该表应该按照如下配置:

module_name:人员信息;

module_code:T_UserInfo

privilege_name:添加与删除

privilege_code:6

这里我们假设的是2的0次方为添加权限,2的1次方为添加权限,2的2次方为删除权限,2的3次方为更新权限,则拥有添加与删除权限就应该为2的1次方+2 的2次方=6,其实2的几次方代表什么含义我们可以另外开个数据库表来配置(或者xml文件)此处我们忽略这些步骤。当然如果你的权限较多,譬如你还希望 a这个角色对人员信息表有上传得权限,我们可以将将上传权限定义为2的4次方,16,16的16进制数为10,记录在数据库里的形式应该为0x10如果a 角色拥有添加、删除、更新、上传权限,则a的权值应该为2的1次方+2的2次方+2的3次方+2的4次方=30,用16进制来表示就应该为0x1E,记录 16进制数据,你不用担心位数不够。

剩余的就是几张关系表了:

人员角色关系表(T_R_User_Role):

1create table T_R_user_role

5(

6 pk_id NUMBER not null,

7 user_id NUMBER,

8 role_id NUMBER,

9 constraint PK_T_R_USER_ROLE primary key (pk_id)

10);

11

角色资源关系表(T_R_Role_Resource)

1create table T_R_role_resource

5(

6 pk_id NUMBER not null,

7 role_id NUMBER,

8 res_id NUMBER,

9 constraint PK_T_R_ROLE_RESOURCE primary key (pk_id)

10);

11

当然如果你不怕麻烦,可以添加进去组(group)、系统(system)、组织(organization),建立起一套属于你自己的完整的权限解决方案,作为系统无关的模块去套用到每个你所架构的应用中去,那是一件极爽的事情。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: