Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > web开发中的权限设计拙见一二(2) ----数据库设计
【标  题】:web开发中的权限设计拙见一二(2) ----数据库设计
【关键字】:web,----
【来  源】:http://www.blogjava.net/tsylo/archive/2007/01/02/91467.html

web开发中的权限设计拙见一二(2) ----数据库设计

Your Ad Here ??????首先上文权限设计拙见(1)中只是想记录下自己权限设计上的一点看法,以及将自己日常最常用的权限解决方案记录下来以供日后回顾,没想到有朋友关注此类的设计,那就只能先把代码拿出来献丑了,抛砖引玉,大家共同探讨学习
??????接着上文来说,上文所讨论的权限设计是一条思路,但既然是web应用,少不了数据库的支持,本文我们来讨论一下数据库的设计。(以下想法及思路仅仅代表本人拙见)
????? 说到权限的数据库设计,必先理清权限中几种实体及其关系,此部分想必有过设计权限经验的同仁都知道怎么设计了,网上摆渡一下也是一裤衩子一裤衩子的,我们就在最平凡直观的数据库关系的基础上来建立权限。下面是我的几个表(所有的表都带有一个pk_id,作为表的自动生成的唯一主键):
用户表(T_UserInfo):
?1/*==============================================================*/
?2/*?Table:?T_UserInfo????????????????????????????????????????????*/
?3/*==============================================================*/
?4create?table?T_UserInfo?
?5(
?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):
?1/*==============================================================*/
?2/*?Table:?T_RoleInfo????????????????????????????????????????????*/
?3/*==============================================================*/
?4create?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):
?1/*==============================================================*/
?2/*?Table:?T_ResourceInfo????????????????????????????????????????*/
?3/*==============================================================*/
?4create?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):
?1/*==============================================================*/
?2/*?Table:?T_R_user_role?????????????????????????????????????????*/
?3/*==============================================================*/
?4create?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)
?1/*==============================================================*/
?2/*?Table:?T_R_role_resource?????????????????????????????????????*/
?3/*==============================================================*/
?4create?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),建立起一套属于你自己的完整的权限解决方案,作为系统无关的模块去套用到每个你所架构的应用中去,那是一件极爽的事情。
连续剧开始了,暂时搁笔~~
采用C#泛型实现数据库之间的切换:【上一篇】
xjl:Spring 事务管理原理探究:【下一篇】
【相关文章】
  • 十个本年最炫的WebOS(网络操作系统)点评(上)
  • “无法在 Web 服务器上启动调试”的解决方法
  • 装VS2003遇到的错误:此计算机上缺少本地WEB应用程序和WEB服务开发所需的组件
  • net时代winforms的地位特别尴尬,而且会一直尴尬下去? ---- 之我见
  • 从最初的代码生成器 到现在的WebSite Developer Studio2.0的版本演变
  • 深入了解 System.Web.HttpWorkerRequest
  • 初步理解J2EE----J2EE是一系列标准
  • Hibernate3与WebLogic8集成
  • 试用Web-Harvest
  • WebOS,一个开始值得关注的新技术
  • 【随机文章】
  • 使用Session State快速、可扩展、安全的管理Web程序(一)
  • 制作集成SP1的Visual Studio 2005安装包
  • hibernate+eclipse+mysql
  • 去除Word文档中的页眉横线
  • 关于EasyDBO中事务管理的一些个人观点
  • OptiView 集成式分析仪
  • 利用IPFW实现限制局域网使用QQ
  • 使用Pyqt在Linux下开发GUI桌面应用
  • 用ashx动态生成文件
  • Table查詢 不完全相等問題
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.