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

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

实现权限管理功能的动作

动作分解 动作名 相关表名 操作集类型
(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

checkuserpurviewcheckpointid

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

checkuserpurviewcheckpointid

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,说明了用户所在的组拥有执行该动作的权限。

java用户权限管理与权限设置(二)相关推荐

  1. 用户权限管理之权限管理

    文章目录 1 基本权限 2 权限管理 3 权限掩码 umask 4 特殊权限 5 特殊属性 1 基本权限 权限 对应数字 意义 r(readable) 4 可读 w(writable) 2 可写 x( ...

  2. python用户权限管理_python---RBAC权限管理项目

    设计标准一  **** 项目需求描述:这是一个真实的项目后端管理平台       要实现如下的功能: 1.在管理页面输入用户名密码,可以登陆到主页 2.不同角色的用户显示的菜单个数不同 3.同一角色用 ...

  3. JAVAWEB开发之权限管理(一)——权限管理详解(权限管理原理以及方案)、不使用权限框架的原始授权方式详解

    知识清单 1.了解基于资源的权限管理方式 2. 掌握权限数据模型 3. 掌握基于url的权限管理(不使用Shiro权限框架的情况下实现权限管理) 4. shiro实现用户认证 5. shiro实现用户 ...

  4. java用户权限管理与角色设置(一)

    实现业务系统中的用户权限管理--设计篇 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览 ...

  5. java linux 权限管理_权限管理java实现(源于Linux中的权限管理算法)

    这个帖子由来已久吧,我也是到处搜到的,然后仔细学习,果然博大精深,然后加强点弄点自己的东西 我已声明 部分转载!! 向大家介绍一种很不错,也是Linux中的权限管理算法. 定义a^b为:a的b次方 假 ...

  6. 计算机如何获取管理权限管理,win7如何设置管理员权限,教您获取

    在Windows系统中,"Administrator"帐户拥有最高的系统权限,很多是后系统为了安全,默认账户是没有开启管理员权限的,那么windows7怎么设置管理员权限呢?今天小 ...

  7. Linux 权限管理: 权限的概念、权限管理、文件访问权限的设置、 粘滞位

    Linux下的基本指令 目录: 权限的概念 权限管理 文件访问权限的设置方法 目录的权限 粘滞位 权限的概念 Linux下用户有两种: 超级用户(root).普通用户. 超级用户:具有最高权限,可以在 ...

  8. mysql管理员权限哪个表_Mysql 用户权限管理(权限列表)

    1. MySQL 权限介绍 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.22 . mysql权限表 ...

  9. SAP系统权限管理及参数设置

    SAP系统的权限管理主要是通过事务代码,权限对象,权限等3个关键对象构筑的. 1. 事务代码(Tcode) SAP系统中,每个操作命令都是唯一对应一个事务代码.事务代码是操作命令的表现形式.用户通过输 ...

最新文章

  1. [bzoj2229][Zjoi2011]最小割
  2. python打开火狐浏览器打不开网页_PHP让指定网页只能在微信内置浏览器打开 附代码...
  3. 用strace工具跟踪系统调用
  4. 正则不等于一个字符串_乳饮料不等于酸奶,记住一个关键词,花最少的钱买到真正的好酸奶...
  5. (Android开发辅助工具)动态广播注册解注工具
  6. v-bind:href= 拼接字符串 - 代码篇
  7. System学习笔记004---Windows系统中hosts文件的作用_Zookeeper在SpringBoot中报错需要配置一下这个文件
  8. pytorch forward
  9. vmware 您无权输入许可证密钥,请请使用系统管理员账户重试
  10. EndNote自定义引用格式和参考文献格式
  11. k8s 删除资源卡住
  12. 为Windows 10 UWP 应用设置代理
  13. 国外 计算机专业 网站,国外计算机类核心期刊及其网站
  14. 只能用GUEST用户访问共享的解决办法
  15. Type string trivially inferred from a string literal, remove type annotation.eslint@typescript-eslin
  16. Tapestry的使用
  17. dsp版win10和普通版区别_Windows10各个版本有什么不同,如何选择适合自己的Win10系统...
  18. win7-32位系统,不能运行flash,解决方法。
  19. TensorFlow2.0选择GPU或CPU训练
  20. 华为硬件工程师社招机考题库_【华为硬件开发工程师面试】第一轮机考,在华为南研所-看准网...

热门文章

  1. Grabcut算法详解
  2. Android 编译流程解析03-手动编译Apk
  3. 面向对象程序设计:农夫过河问题
  4. 解析 Ensembl 的数据库服务器
  5. jsp ssh礼品在线销售系统
  6. 【前端】从零开始读懂Web3
  7. 含泪整理最优质SketchBook软件插件素材,你想要的这里都有
  8. 2019-9-19【Javase】String字符串、装箱和拆箱、日期类、正则
  9. https://docs.icons8.com/ 切片 钢笔 布尔计算
  10. FITing-Tree: A Data-aware Index Structure