`

权限管理数据表设计<一>

阅读更多

B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能。因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将会将他们彻底的“拒之门外”。下面就让我们一起了解一下如何设计可以满足大部分B/S系统中对用户功能权限控制的权限系统。

 

需求陈述

  • 不同职责的人员,对于系统操作的权限应该是不同的。优秀的业务系统,这是最基本的功能。

     

  • 可以对“组”进行权限分配。对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情。所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配。

     

  • 权限管理系统应该是可扩展的。它应该可以加入到任何带有权限管理功能的系统中。就像是组件一样的可以被不断的重用,而不是每开发一套管理系统,就要针对权限管理部分进行重新开发。

     

  • 满足业务系统中的功能权限。传统业务系统中,存在着两种权限管理,其一是功能权限的管理,而另外一种则是资源权限的管理,在不同系统之间,功能权限是可以重用的,而资源权限则不能。

关于设计

  借助NoahWeb的动作编程理念,在设计阶段,系统设计人员无须考虑程序结构的设计,而是从程序流程以及数据库结构开始入手。为了实现需求,数据库的设计可谓及其重要,无论是“组”操作的概念,还是整套权限管理系统的重用性,都在于数据库的设计。

我们先来分析一下数据库结构:

  首先,action表(以下简称为“权限表”),gorupmanager表(以下简称为“管理组表”),以及master表(以下简称为“人员表”),是三张实体表,它们依次记录着“权限”的信息,“管理组”的信息和“人员”的信息。如下图:

  这三个表之间的关系是多对多的,一个权限可能同时属于多个管理组,一个管理组中也可能同时包含多个权限。同样的道理,一个人员可能同时属于多个管理组,而一个管理组中也可能同时包含多个人员。如下图:

  由于这三张表之间存在着多对多的关系,那么它们之间的交互,最好使用另外两张表来完成。而这两张表起着映射的作用,分别是“actiongroup”表(以下简称“权限映射表”)和“mastergroup”表(以下简称“人员映射表”),前者映射了权限表与管理组表之间的交互。后者映射了人员表与管理组表之间的交互。如下图:

  另外,还需要一张表来控制系统运行时左侧菜单中的权限分栏,也就是“权限分栏表”,如下图:

  根据上面的分析,我们进行数据库结构设计,如下图:

  点击这里查看权限管理系统数据表字段设计

 

  为了能够进行良好的分析,我们将数据库结构图拆分开来,三张实体表的作用已经很清晰,现在我们来看一下两张映射表的作用。

一 权限映射表 如下图:

  首先,我们来了解一下权限映射表管理组表以及权限表之间的字段关联。

  看图中的红圈,先看gorupid字段相关联,这种关联方式在实际数据库中的表现如下图:

  如图中所示,管理组表中“超级管理员”的groupid为1,那么权限映射表中groupid为1的权限也就是“超级管理员”所拥有的权限。

  使用groupid字段关联,是为了查到一个管理组能够执行的权限有哪些。但这些权限的详细信息却是action字段关联所查询到的。

  action字段相关联在数据库中的表现如下图:

  通过这种关联,才查询到权限映射表之中那些权限的详细信息。综合起来,我们就知道了一个管理组可以执行的权限有哪些,以及这些权限的详细信息是什么。

  或许你会问,为什么不使用actionid字段相关联呢?因为:

  • 权限表中的id字段在经过多次的数据库操作之后可能会发生更改。
  • 权限映射表中仅仅记录着一个管理组可以执行的权限。
  • 一旦权限表中的id更改,那么权限映射表中的记录也就更改了。
  • 一个管理组可以执行的权限势必将出错,这是非常不希望的。

  考虑到上面的情况,所以应该使用action字段相关联,因为:

  • 权限表中,id可能发生变化,而action字段却是在任何情况下也不可能发生变化的。
  • 权限映射表中记录的action字段也就不会变。
  • 一个管理组可以执行的权限就不会出错了。

二 人员映射表 如下图:

  我们来了解一下人员映射表管理组表以及人员表之间的字段关联,如下图:

 

  看图中的红圈部分,先看groupid字段关联,这种关联方式在数据库中的表现如下图:

  如图,“超级管理员”组的groupid为1,我们再看人员映射表,admin属于超级管理员组,而administrator属于超级管理员组,同时也属于管理员组。

  使用这种关联方式,是为了查到一个管理组中的人员有谁。和上面一样,人员的详细信息是靠id字段(人员映射表中是masterid字段)关联查询到的。

  id字段(人员映射表中是masterid字段)关联表现在数据库中的形式如下图:

  一个人员可能同时属于多个“管理组”,如图中,administrator就同时属于两个“管理组”。所以,在人员映射表中关于administrator的记录就会是两条。

  这种关联方式才查询到管理组中人员的详细信息有哪些。综合起来,才可以知道一个管理组中的人员有谁,以及这个人员的详细信息。

  再结合上面谈到的权限表权限映射表,就实现了需求中的“组”操作,如下图:

  其实,管理组表中仅仅记录着组的基本信息,如名称,组id等等。至于一个组中人员的详细信息,以及该组能够执行的权限的详细信息,都记录在人员表权限表中。两张映射表才真正记录着一个组有哪些人员,能够执行哪些权限。通过两张映射表的衔接,三张实体表之间的交互才得以实现,从而完成了需求中提到的“组”操作

  我们再来看一下权限分栏表权限表之间的交互。这两张表之间的字段关联如下图:

  两张表使用了actioncolumnid字段相关联,这种关联方式在数据库中的表现如下图:

  如图所示,通过这种关联方式,我们可以非常清晰的看到权限表中的权限属于哪个分栏。

  现在,数据库结构已经很清晰了,分配权限的功能以及“组”操作都已经实现。下面我们再来分析一下需求中提到的关于权限管理系统的重用性问题。

  为什么使用这种数据库设计方式搭建起来的系统可以重用呢?

  • 三张实体表中记录着系统中的三个决定性元素。“权限”,“组”和“人”。而这三种元素可以任意添加,彼此之间不受影响。无论是那种类型的业务系统,这三个决定性元素是不会变的,也就意味着结构上不会变,而变的仅仅是数据。
  • 两张映射表中记录着三个元素之间的关系。但这些关系完全是人为创建的,需要变化的时候,只是对数据库中的记录进行操作,无需改动结构。
  • 权限分栏表中记录着系统使用时显示的分栏。无论是要添加分栏,修改分栏还是减少分栏,也只不过是操作记录而已。

  综上所述,这样设计数据库,系统是完全可以重用的,并且经受得住“变更”考验的。

总结:

  此套系统的重点在于,三张实体表牢牢地抓住了系统的核心成分,而两张映射表完美地映射出三张实体表之间的交互。其难点在于,理解映射表的工作,它记录着关系,并且实现了“组”操作的概念。而系统总体的设计是本着可以在不同的MIS系统中“重用”来满足不同系统的功能权限设置。

附录:

权限管理系统数据表的字段设计

  下面我们来看看权限管理系统的数据库表设计,共分为六张表,如下图:

action表:

  action表中记录着系统中所有的动作,以及动作相关描述。

actioncolumn表:

  actioncolumn表中记录着动作的分栏,系统运行时,左侧菜单栏提供了几块不同的功能,每一块就是一个分栏,每添加一个分栏,该表中的记录就会增加一条,相对应的,左侧菜单栏中也会新增机一个栏。

actiongroup表:

  actiongroup表记录着动作所在的组。

groupmanager表:

  groupmanager表记录着管理组的相关信息,每添加一个管理组,这里的记录就会增加一条。

mastergroup表:

  mastergroup表记录着管理员所在的管理组,由于一名管理员可能同同时属于多个组,所以该表中关于某一名管理员的记录可能有多条。

master表:

  master表记录着所有管理员的信息,每添加一个管理员,该表就会增加一条记录。

评论
1 楼 hit.java 2009-10-20  
[size=medium][color=darkblue]你的权限设计表十分合理,讲解也十分通俗易懂。但我有个疑问:为什么你说action表中的id字段在经过多次的数据库操作之后可能会发生更改?这个id不是自增长的主键吗?action表中的action字段也是唯一的吗?[/color][/size]

  regards.

相关推荐

    基于JSP的办公自动化系统

    人性化设计&lt;br&gt;&lt;br&gt;软件产品介质:&lt;br&gt;1.oa.rar &lt;br&gt;2.oaclass.rar &lt;br&gt;3.oalib.rar&lt;br&gt;4.oadatabase.rar&lt;br&gt;4.Web版办公自动化OA系统使用手册.doc &lt;br&gt;5.web.xml server.xml &lt;br&gt;&lt;br&gt;需要者请联系:e_mail:fzlotuscn...

    网络工程师考试考点分析与真题详解.网络设计与管理篇

    54.00 元&lt;br&gt;徐锋/ 施游/ 窦亚玲 等 &lt;br&gt;电子工业出版社 &lt;br&gt;ISBN:ISBN 7-121-00765-7&lt;br&gt;开本:787*1092 1/16 &lt;br&gt;字数:486.4千字&lt;br&gt;印张:19 &lt;br&gt;印数:8000&lt;br&gt;页数:289 &lt;br&gt;版别版次:2005年2月北京第一版第一...

    网络工程师考试考点分析与真题详解.网络设计与管理篇.part4

    54.00 元&lt;br&gt;徐锋/ 施游/ 窦亚玲 等 &lt;br&gt;电子工业出版社 &lt;br&gt;ISBN:ISBN 7-121-00765-7&lt;br&gt;开本:787*1092 1/16 &lt;br&gt;字数:486.4千字&lt;br&gt;印张:19 &lt;br&gt;印数:8000&lt;br&gt;页数:289 &lt;br&gt;版别版次:2005年2月北京第一版第一...

    C#编程经验技巧宝典

    27&lt;br&gt;&lt;br&gt;0056 强行改变运算符的运算顺序 27&lt;br&gt;&lt;br&gt;第3章 程序算法 29&lt;br&gt;&lt;br&gt;3.1 数据结构 30&lt;br&gt;&lt;br&gt;0057 如何实现单向链表 30&lt;br&gt;&lt;br&gt;0058 如何实现双向链表 35&lt;br&gt;&lt;br&gt;0059 如何实现堆栈 41&lt;br&gt;...

    ASP与SQL网页数据库程序设计

    4-1 表设计工具属性页 154&lt;br&gt;6-4-2 利用表设计工具属性创建索引 156&lt;br&gt;6-4-3 使用向导创建索引 158&lt;br&gt;6-4-4 利用“管理索引”窗口管理表索引 161&lt;br&gt;6-5 创建关联 162&lt;br&gt;6-6 数据输入 165&lt;br&gt;6-6-1 在表...

    一套erp系统的详细设计报告

    目 录&lt;br&gt;&lt;br&gt;一、总体概述 5&lt;br&gt;二、名称解释 6&lt;br&gt;1、名称解释 6&lt;br&gt;2、流程图例解释 7&lt;br&gt;三、V2.0 ERP系统总体架构图 8&lt;br&gt;四、V2.0业务处理主要数据流程总图 9&lt;br&gt;五、系统基本参数说明 11&lt;br&gt;六、辅助资料 15...

    网络工程师考试考点分析与真题详解.网络设计与管理篇.part5

    54.00 元&lt;br&gt;徐锋/ 施游/ 窦亚玲 等 &lt;br&gt;电子工业出版社 &lt;br&gt;ISBN:ISBN 7-121-00765-7&lt;br&gt;开本:787*1092 1/16 &lt;br&gt;字数:486.4千字&lt;br&gt;印张:19 &lt;br&gt;印数:8000&lt;br&gt;页数:289 &lt;br&gt;版别版次:2005年2月北京第一版第一...

    网络工程师考试考点分析与真题详解.网络设计与管理篇.part2

    54.00 元&lt;br&gt;徐锋/ 施游/ 窦亚玲 等 &lt;br&gt;电子工业出版社 &lt;br&gt;ISBN:ISBN 7-121-00765-7&lt;br&gt;开本:787*1092 1/16 &lt;br&gt;字数:486.4千字&lt;br&gt;印张:19 &lt;br&gt;印数:8000&lt;br&gt;页数:289 &lt;br&gt;版别版次:2005年2月北京第一版第一...

    网络工程师考试考点分析与真题详解.网络设计与管理篇.part6

    54.00 元&lt;br&gt;徐锋/ 施游/ 窦亚玲 等 &lt;br&gt;电子工业出版社 &lt;br&gt;ISBN:ISBN 7-121-00765-7&lt;br&gt;开本:787*1092 1/16 &lt;br&gt;字数:486.4千字&lt;br&gt;印张:19 &lt;br&gt;印数:8000&lt;br&gt;页数:289 &lt;br&gt;版别版次:2005年2月北京第一版第一...

    网络工程师考试考点分析与真题详解.网络设计与管理篇.part3

    54.00 元&lt;br&gt;徐锋/ 施游/ 窦亚玲 等 &lt;br&gt;电子工业出版社 &lt;br&gt;ISBN:ISBN 7-121-00765-7&lt;br&gt;开本:787*1092 1/16 &lt;br&gt;字数:486.4千字&lt;br&gt;印张:19 &lt;br&gt;印数:8000&lt;br&gt;页数:289 &lt;br&gt;版别版次:2005年2月北京第一版第一...

    mysql5.1中文手册

    升级授权表&lt;br&gt;2.10.3. 将MySQL数据库拷贝到另一台机器&lt;br&gt;2.11. 降级MySQL&lt;br&gt;2.12. 具体操作系统相关的注意事项&lt;br&gt;2.12.1. Linux注意事项&lt;br&gt;2.12.2. Mac OS X注意事项&lt;br&gt;2.12.3. Solaris注意事项&lt;br&gt;2.12.4. ...

    网络工程师考试考点分析与真题详解.网络设计与管理篇.part7

    54.00 元&lt;br&gt;徐锋/ 施游/ 窦亚玲 等 &lt;br&gt;电子工业出版社 &lt;br&gt;ISBN:ISBN 7-121-00765-7&lt;br&gt;开本:787*1092 1/16 &lt;br&gt;字数:486.4千字&lt;br&gt;印张:19 &lt;br&gt;印数:8000&lt;br&gt;页数:289 &lt;br&gt;版别版次:2005年2月北京第一版第一...

    C#.net_经典编程例子400个

    68&lt;br&gt;实例060 将数据库数据添加到组合框中 70&lt;br&gt;实例061 借助绑定控件实现数据选择录入 71&lt;br&gt;实例062 ListBox拒绝添加重复信息 72&lt;br&gt;2.6 选择类控件应用 73&lt;br&gt;实例063 利用选择控件实现权限设置 ...

    Linux环境数据库管理员指南

    在 Linux上安装并运行 Oracle 40&lt;br&gt;3.1 引言 40&lt;br&gt;3.2 概念 41&lt;br&gt;3.2.1 系统全局区域 41&lt;br&gt;3.2.2 程序全局区域 42&lt;br&gt;3.2.3 表空间 42&lt;br&gt;3.2.4 数据文件 42&lt;br&gt;3.2.5 区 42&lt;br&gt;3.2.6 段 42&lt;br&gt;3.2.7 控制文件 ...

    最新开发作品:企业管理系统 ERP数据库

    系统管理员,企业管理者专用)&lt;br&gt;&lt;br&gt;&lt;br&gt; 一、本系统用户分管理员,财务员,库管,采购经理,采购员,采购经理,销售员,人事员,生产管理,报表管理 10种,各自有着不同的权限. &lt;br&gt; 二、系统流程:管理员管理所有的用户,...

    Blog系统实现毕业论文

    BLOG系统设计 12&lt;br&gt;4.1后台功能模块详细设计 12&lt;br&gt;4.1.1 身份验证 12&lt;br&gt;4.1.2 后台文章添加管理 13&lt;br&gt;4.1.3 后台文章类别管理 14&lt;br&gt;4.2前台功能模块详细设计 15&lt;br&gt;4.2.1前台主界面 15&lt;br&gt;4.2.2 前台用户回复...

    MYSQL

    &lt;br&gt;11 MySQL 基准套件 &lt;br&gt;12 MySQL 实用程序 &lt;br&gt;12.1 各种 MySQL 程序概述 &lt;br&gt;12.2 管理一个 MySQL 服务器 &lt;br&gt;12.3 从 MySQL 数据库和表中倒出(dump)结构和数据 &lt;br&gt;12.4 从文本文件导入数据 &lt;br&gt;12.5 MySQL ...

    jive.chm

    &lt;br&gt; 13 JDBC性能优化技巧 &lt;br&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;权限设计&lt;br&gt; 1 权限系统概要 &lt;br&gt; 2 关于权限设计方面的问题 &lt;br&gt; 3 关于用户角色权限管理一点想法 &lt;br&gt; 4 关于权限系统的设计 &lt;br&gt;&lt;br&gt; &lt;br&gt; &lt;br&gt;缓存系统&lt;br&gt; 1 ...

    Linux管理员指南

    文件系统 101&lt;br&gt;8.1 文件系统的构成 101&lt;br&gt;8.1.1 i-结点 101&lt;br&gt;8.1.2 超级块 102&lt;br&gt;8.2 管理文件系统 102&lt;br&gt;8.2.1 挂装和卸载本地磁盘 102&lt;br&gt;8.2.2 使用fsck程序 105&lt;br&gt;8.3 对硬盘进行分区 107&lt;br&gt;8.3.1 硬盘...

Global site tag (gtag.js) - Google Analytics