`
digyso
  • 浏览: 142198 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

实现业务系统中的用户权限管理--实现篇

阅读更多

http://www.noahweb.net/mail/2/Project_1.htm

在设计篇中,我们已经为大家阐述了有关权限管理系统的数据库设计,在本篇中,我们将重点放在其实现代码部分。为了让你能够更直接更有效的看到全部动作的代码,我们使用“动作分解列表”的方式来陈述每个动作以及相关资源。

实现权限管理功能的动作

动作分解 动作名 相关表名 操作集类型
(S,U,I,D,SQL)
表单 模组 字符资源 是否分页? 返回提示? 权限检测
权限初始化安装 setup setup setupok
显示添加管理组界面 addnewgroup addgroup checkuserpurview
执行添加管理员动作 addnewgroup_ex gorupmanager、gorupmanager、mastergroup S、I、I checkuserpurview

addok
adderror

显示所有管理组列表以执行设置权限动作 setgroupinfo checkuserpurview

viewtitle
list_allgroup

显示设置管理组权限界面 setgroupinfo_input checkuserpurview

viewtitle
list_allgrouppurview
del_confirm

执行设置管理组权限动作 setgroupinfo_ex actiongroup、action、actiongroup D、S、I checkuserpurview

setgrouppurview
loginjumpframe

执行删除管理组动作 delgroup_ex groupmaster、actiongroup D、D

checkuserpurview checkpointid

viewtitle
do_ok
list_allgroup

显示所有管理组列表以执行查看管理组成员动作 viewgroupmaster checkuserpurview

viewtitle
list_allgroup

查看所选择管理组下的所有成员

viewmaster checkuserpurview

viewtitle
list_groupmaster

显示添加管理员界面

addnewmaster addnewmaster checkuserpurview
执行添加管理员动作 addnewmaster_ex master、master、mastergroup S、I、I checkuserpurview

addok
adderror

显示所有管理员列表以执行设置管理员权限动作 setmasterpurview checkuserpurview

viewtitle
list_allmaster

查看所选择管理员所在管理组 setmasterpurview_input checkuserpurview

viewtitle
list_mastergroup

执行设置所选管理员权限

setmasterpurview_ex mastergroup、mastergroup D、I checkuserpurview viewtitle
do_ok
loginjumpframe

显示所有管理员列表以执行设置管理员密码动作 setmasterpass checkuserpurview

viewtitle
list_allmaster

显示密码修改界面

setmasterpass_input masterpassword checkuserpurview

执行修改管理员密码动作

setmasterpass_ex master SQL checkuserpurview viewtitle
do_ok

显示所有管理员列表以执行修改管理员信息动作

setmasterinfo checkuserpurview

viewtitle
list_allmaster

显示所选择管理员信息修改界面

setmasterinfo_input master S editmasterinfo checkuserpurview del_confirm

执行修改管理员信息动作

setmasterinfo_ex master U checkuserpurview viewtitle
do_ok
list_allmaster

执行删除管理组动作 delmaster_ex master、actiongroup D、D

checkuserpurview checkpointid

viewtitle
do_ok
list_allmaster

执行修改当前管理员密码动作 setmyinfo_ex master U

viewtitle
do_ok

显示修改当前管理员信息界面 setmyinfo master S editmasterinfo
执行修改当前管理员密码动作 setmypass_ex master SQL

viewtitle
do_ok

显示修改当前管理员密码界面 setmypass masterpassword

系统动作

动作分解 动作名 相关表名 操作集类型
(S,U,I,D,SQL)
表单 模组 字符资源 是否分页? 返回提示? 权限检测
当管理员第一次进入管理系统时将使用该动作 * login
系统登录动作,管理员登录系时将使用该动作 login master SQL

loginok
loginjumpframe
loginerror

显示窗口TITLE信息 viewtoolstitle managertitle
显示左工具条 list_tools
任务系统(预留) autoviewtask
当用户未进行登录而执行动作时会引发该动作 nosession

nosession
nosessionjumpframe

当用户进行删除操作时未点击确认时会引发该动作 nopointid nopointid
当用户试图执行自己没有权限执行的动作时会引发该动作 nopurview nopurview
退出系统 outlogin

loginout
nosessionjumpframe

详解模组:

  1.setup(数据库初始化、权限设置模组)

  当布署好一个新的系统后,我们可以通过执行一个动作setup来安装数据库和一些初始值,通过执行这个动作系统可以正常运行。因为执行setup这个动作时会调用到一个名称为setup的模组,这个模组的作用是初始化系统所用到的数据库,并且在系统中设置动作的权限,否则数据库和有权限的动作就没办法执行。下面我们来看一下setup模组的代码,点击这里查看代码。这里我们把代码拆分开看一下,由于setup模组里有好多类似的代码,所以这里我们只找出不同功能的代码做一下介绍:

  第一段:数据库安装

  在模组中首先调用了一个datebase_SQL_setup这个数据库操作集,这个数据库操作集用来为系统中的数据库表(根据情况删除或新建)做初始化。

  第二段:添加权限信息

  代码中调用了action_I_newone这个数据库操作集,在这个操作集中加入权限的名称和它的其它信息。

  第三段:添加一个管理员

  这部分代码中调用了master_I_newone数据库操作集在数据库中添加了一个管理员的信息,这个信息是可以不写在这里的,可以直接在数据库中添加,但是为了减少不必要的麻烦所以直接在这里添入了一个默认的管理员。

  第四段:添加管理员组

  通过调用groupmanager_I_newmaster这个数据库操作集新建了一个管理员组,并加入了详细的管理员组信息,可以把新用户加入到此管理员组。

  第五段:添加新的工具分栏

  

  通过调用actioncolumn_I_newone数据库操作集在工具栏里加入一个工具栏分栏选项。

  第六段:指定管理组

  通过调用mastergroup_I_newone数据库操作集把admin这个用户加入到第一个管理组里,使该用户成为第一个管理组的成员。

  最后一段:指定管理组拥有的权限

  这段代码首先调用了action_S_all数据库操作集并使用Loop语句列出所有的动作,然后调用actiongroup_I_newone这个数据库操作集,把所有的动作都加入到第一个管理组里,使第一个管理组拥有所有权限。

  这里之所以把数据库的安装和权限的设置都放在模组里面,是为了使用户使用更加方便,不需要再去重新手动建库,以减不在数据库这方面的错误,使系统更加简单流畅。如果其它系统也需要权限这方面的管理,可以把模组稍做修改就可以直接拿来用,这样也体现出代码的重用性。

  2.checkuserpurview(检验当前用户能否执行该动作的模组)

  在权限管理系统中,模组checkuserpurview得到了反复使用,该模组担负着检测用户权限的任务,在所有需要进行访问权限控制的动作的开始部分都调用了该模组,所以理解该模组的代码也有一定难度。下面,我们来看一看该模组的代码。

  我们将整段代码拆分一下,首先看第一段,如下图:

  判断_SESSION.myloginid的值是否为空,如果为空,在当前页面中执行nosession这个动作。我们在用户登陆的动作中login会为登陆的用户使用myloginid的SESSION变量记录下该用户的ID,因此如果用户是正常登陆并在SESSION有效期内的话,则_SESSION.myloginid的值是不可能为空的。通过此部分代码检测用户是否已经登陆成功并获得合法的访问身份。

  然后看下面的代码,如下图:

  调用数据库操作集mastergroup_S_bymasterid,使用逻辑层的Loop,使用当前执行的action以及查询返回的groupid作为条件,调用数据库操作集actiongroup_S_byactionandgroupid进行循环查询,如果查询返回值大于0(零),将局部变量purview的值设置为1。

  这段代码的重点在于使用的Loop进行循环,由于actiongroup表中记录着用户所处的管理组能够执行的权限,并且一个用户可能同时会属于多个组,因此我们需要去检验用户属于的多个组中是否有对该动作执行的权限,因此,我们使用当前需要执行的动作action以及用户所处的管理组groupid循环查询,当前用户所属于的组中只要有一个组具有执行该动作的执行权限,则该用户就可以执行该动作。

  最后一部分代码如下图:

  再次使用判断,如果purview的值不为1的话,则在当前页面执行nopurview动作。

  由于之前的代码中,如果用户拥有执行动作的权限的话,会将局部变量purview的值设置为1,所以这里如果该变量值不为1,就说明了此用户没有执行动作的权限,故执行nopurview动作。

总结

  从设计到实现,权限管理系统的教程到这里就全部结束了。在设计阶段,最重要也是最难理解的是那两张映射表的作用,理解了两张映射表,基本上也就理解了整套数据库的设计。而实现阶段,比较难理解的就是上面说到的模组checkuserpurview了。理解该模组,需要联合数据库设计,actiongroup表中记录着用户组可以执行的权限,使用action字段和groupid字段进行查询,返回的数大于1,说明了用户所在的组拥有执行该动作的权限。

附录

MYSQL版本权限管理系统源码下载

MSSQL版本权限管理系统源码下载

分享到:
评论

相关推荐

    实现业务系统中的用户权限管理--设计篇.PDF

    实现业务系统中的用户权限管理--设计篇.PDF

    实现业务系统中的用户权限管理--设计篇.doc

    "实现业务系统中的用户权限管理--设计篇" 在本篇文章中,我们将讨论如何设计一个完整的权限管理系统,以满足业务系统中的用户权限管理需求。权限管理系统是业务系统中不可或缺的一部分,它决定了用户对系统的访问...

    实现业务系统中的用户权限管理--设计篇

    用户权限管理是业务系统中控制用户访问资源的一种机制,其核心目标是根据用户的角色和职责,合理分配对系统功能和数据的访问权限。它涉及到用户认证(Authentication)、授权(Authorization)和审计(Auditing)三...

    用户权限管理设计与实现

    在本文中,我们将深入探讨用户权限管理的设计与实现,基于提供的文件名"实现业务系统中的用户权限管理--设计篇.docx"和"实现业务系统中的用户权限管理--实现篇.docx"来解析这一主题。 首先,我们要理解用户权限管理...

    通用权限管理系统设计篇

    "通用权限管理系统设计篇"着重探讨了如何设计一个适用于多种场景、能够处理不同用户和角色权限的系统。在这个主题下,我们将深入理解权限管理的核心概念、设计原则以及实现策略。 一、权限管理基础 权限管理主要...

    实现业务系统中的用户权限管理

    因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将会将他们彻底的“拒之门外”。下面就让我们一起了解一下如何设计...

    web网站权限管理系统设计与实现

    本篇文章将深入探讨基于JSP的权限管理系统的设计与实现,涉及Web服务、Web开发、Web设计以及Java编程等多个技术领域。 首先,我们要理解权限管理系统的概念。它是指通过定义和控制用户对资源的访问权限,确保只有...

    SpringBoot权限管理系统

    本篇文章将深入探讨一个基于SpringBoot开发的权限管理系统,旨在帮助读者理解如何利用SpringBoot进行权限管理系统的构建。 一、SpringBoot概述 SpringBoot是由Pivotal团队提供的全新框架,它为简化Spring应用的初始...

    TP5后台权限管理系统.rar

    本篇文章将详细解析一个利用PHP的ThinkPHP5框架构建的后台权限管理系统,帮助读者理解其核心概念、设计模式以及实现方式。 首先,我们要了解ThinkPHP5(简称TP5)框架。TP5是基于PHP的轻量级开发框架,以其简洁的...

    web业务系统权限控制

    - **分布式部署**:每个业务系统拥有独立的权限管理系统,适合业务系统较多或地理位置分散的情况。这种方式虽然增加了部署和维护的复杂度,但能够更灵活地应对不同场景的需求。 #### 四、权限控制流程 - **业务...

    .net 权限管理系统源码

    本篇将详细探讨一个基于EasyUI的.NET权限管理系统源码,旨在帮助开发者理解和掌握此类系统的实现机制。 首先,让我们了解.NET框架。.NET是由微软开发的一系列开发平台,提供了丰富的类库、开发工具和运行环境,支持...

    C# 通用权限管理系统源码、Winform 开发框架源码 devexpress 多主题

    devexpress 多主题通用权限管理系统"是一个典型的业务管理系统实例,它结合了C#的强大编程语言特性、Winform的易用性和DevExpress的高级控件功能,为开发者提供了实现高效、灵活的权限管理解决方案。通过学习和研究...

    ThinkPHP6内核通用网站后台权限管理系统源码.zip

    本篇将深入探讨一款基于ThinkPHP6框架构建的通用网站后台权限管理系统的源码,通过分析其核心结构、设计模式以及功能实现,来揭示其内在的工作原理。 首先,ThinkPHP6是一个流行的PHP框架,以其轻量级、高效和易用...

    基于Java的学生课绩管理系统的设计与实现--论文

    《基于Java的学生课绩管理系统的设计与实现》这篇论文主要探讨了如何利用Java技术构建一个高效、易用的学生课绩管理平台。系统设计采用MVC(Model-View-Controller)架构模式,这是一种常见的软件设计模式,它将应用...

    如何使用AngularJs打造权限管理系统【简易型】

    首先,要了解什么是权限管理系统,它是指在软件系统中用于管理用户权限、角色、权限分配等功能的一套机制。一个良好的权限管理系统能够有效地控制不同用户对系统的访问权限,确保数据的安全性。 ### 引言 文章以...

    通用权限管理概要设计说明书

    《实现业务系统中的用户权限管理--实现篇》可能涵盖了具体的技术实现,如使用Spring Security或Apache Shiro框架进行权限控制,通过AOP(面向切面编程)实现权限拦截,或者利用JWT(JSON Web Token)进行身份认证。...

    简单实用权限管理系统

    本篇文章将深入探讨“简单实用权限管理系统”的核心概念、功能以及实现机制,帮助读者全面理解这一主题。 权限管理系统的主要目标是确保只有授权的用户能够访问特定的系统资源,如文件、数据库记录或应用程序功能。...

    java web 系统权限设计 源码

    《通用权限管理系统设计篇.doc》可能涵盖了系统设计的整体思路、数据库设计、权限控制逻辑以及实际操作步骤,对于理解源码非常有帮助。阅读文档可以帮助我们快速了解系统架构和实现细节,避免直接看源码带来的困扰...

    权限管理设计与代码

    本文将深入探讨"权限管理设计与代码"这一主题,主要基于"实现业务系统中的用户权限管理--设计篇.htm"这个文档内容,来阐述权限管理的核心概念、设计原则以及常见实现方式。 权限管理的核心在于控制不同用户对系统...

Global site tag (gtag.js) - Google Analytics