`
liran_java
  • 浏览: 68329 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

用户权限管理

    博客分类:
  • DBMS
阅读更多
实现业务系统中的用户权限管理 -- 设计篇
   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 表记录着所有管理员的信息,每添加一个管理员,该表就会增加一条记录。

 

分享到:
评论
2 楼 Listen_ing 2010-09-19  
要是有简单的示例源码就更完美了,基本上看懂了LZ要表达的意思,这个设计思想很好,学习了
1 楼 yuantong 2009-04-25  
太繁琐了。。

相关推荐

    用户权限管理模块(C++实现)

    本项目"用户权限管理模块(C++实现)"是一个用C++编程语言实现的权限管理解决方案,它包含了几个核心功能,如单例模式、用户区分、用户管理以及密码安全存储。 首先,我们来深入理解C++实现的用户权限管理模块。C++...

    用户权限管理系统 ppt

    用户权限管理系统,是PPT,可以了解用户权限管理系统的设计。仅供学习。

    用户权限管理 v2.0

    《用户权限管理 v2.0》是一个基于DELPHI开发的程序,主要目的是为了实现多用户的权限管理,模拟Windows 2000操作系统中的用户和用户组管理功能。在这个系统中,不同用户登录后会根据其权限动态生成不同的操作菜单,...

    jsp用户权限管理系统

    【jsp用户权限管理系统】是一个基于JavaServer Pages(JSP)技术构建的权限管理解决方案,用于控制用户对系统资源的访问和操作。这个系统通常包括一套完整的界面,旨在提供美观且功能丰富的用户体验。根据描述,该...

    用户权限管理系统分析

    用户权限管理系统是Web开发中一个至关重要的组成部分,它主要负责控制不同用户对系统的访问和操作权限。在设计和实现这样的系统时,需要遵循一定的策略和流程,以确保系统的安全性和数据的保护。 首先,账户管理是...

    基于labview开发用户权限管理软件模块,支持三级用户权限管理

    基于labview开发用户权限管理软件模块,支持三级用户权限管理

    用户权限管理系统 asp.net

    用户权限管理系统是IT行业中至关重要的一个模块,尤其是在大型企业或网站中,用于保障系统的安全性和数据的保密性。本系统采用asp.net技术栈构建,结合SQLServer数据库,以三层架构设计为基石,提供了完整的源代码和...

    php实现用户权限管理

    php实现用户权限管理,调用数据来源于MYSQL数据库

    delphi写的用户权限管理

    用delphi写的用户权限管理 修改了权限树节点状态生成过程,采用循环遍历树结点 修改了主界面菜单和工具条显示过程,采用递规遍历菜单 通过系统管理员进入sys权限设置,在mainfrom创建的时候读取权限。 权限设置...

    MVC4 用户权限管理

    MVC4 简单的用户权限管理系统 适用于新手 使用方式:注释Admin.cs中的[Authorize(Roles = "员工")],修改web.config中的;Initial Catalog=User_Role;Persist Security Info=True;User ID=sa;Password=chemao520" ...

    用户权限管理菜单 用户权限管理菜单 用户权限管理菜单

    用户权限管理菜单是软件系统中不可或缺的一个重要组成部分,它主要用于控制不同用户对系统资源的访问权限,确保数据安全和操作合规性。在商业级的软件应用中,用户权限管理尤其关键,因为它涉及到企业的核心业务流程...

    Access版用户权限管理改进版

    在IT行业中,数据库管理系统(DBMS)的用户权限管理是一个至关重要的环节,它涉及到数据的安全性和访问控制。这里我们关注的是一个特别针对Access版本的用户权限管理系统的改进版。Access是由Microsoft开发的一个...

    公司信息化系统用户权限管理制度.pdf

    "公司信息化系统用户权限管理制度" 本制度的主要内容是规范公司信息化系统的权限管理工作,明确系统用户权限的管理职责。该制度适用于公司各单位,旨在加强信息化系统的安全和稳定运行。 一、总则 本制度的目的是...

    用户权限管理系统(J2EE)

    用户权限管理系统是基于J2EE平台构建的企业级应用,它主要负责管理用户的访问权限,确保系统资源的安全性。在这个系统中,用户、角色和权限三者之间形成了一个关键的关联模型,是系统核心功能实现的基础。 用户是...

    用户权限管理系统 源代码和设计报告

    用户权限管理系统是IT行业中至关重要的一个模块,它用于管理和控制用户对系统资源的访问权限,确保数据的安全性和系统的稳定性。本项目使用了PHP、MySQL、Apache和QeePHP框架,这些技术的组合提供了高效且灵活的后台...

    用户权限管理图例解释

    用户权限管理图例解释 用户权限管理是指对用户在系统中的访问权限进行控制和管理,以确保系统的安全和稳定。用户权限管理系统通常包括权限管理、角色管理、用户管理等模块,以便实现对用户的访问权限控制。 在 B/S...

Global site tag (gtag.js) - Google Analytics