接下来要做的是权限系统的数据库结构设计,在上一章我们了解了权限系统是通过什么来管理好权限的,我们选用其中比较常用的权限系统来实现当前项目管理要求。

  下面是我们选择的权限系统关系模型:

 

  从以上关系可以看到,用户登录成功以后,通过读取管理员账号信息获取当前管理员所在部门与职位,读取职位中的权限信息。进入系统以后,通过职位权限信息筛选出显示的菜单项;访问各功能页面并进行增删改查操作时,通过权限信息判断当前管理员是否有操作权限,从而实现对系统管理员操作权限的控制。下面分别解说一下各数据表的用途。

  菜单表是用来注册(绑定)菜单、管理页面和接口用的,没有将接口和菜单项添加到菜单表的话,程序是不清楚有那些菜单项和接口的,菜单项与接口之间存在什么相的关系。

  所以需要在开发时,手动将它们添加到菜单表中,才能对各功能进行对应的管理。

  在开始设计菜单表之前,大家要思考的是,我们需要存储什么信息,它们之间有什么关联,每个字段有什么用途,为什么要增加这个字段或减少这个字段?

  对于菜单表字段,多数字段大家都很容易定下来,比如说菜单名称、菜单url(绑定的html页面名称或路径)、菜单小图标(增加菜单的美观度)、上一菜单id(用于建立树级菜单目录)、排序、是否显示(对于有些页面或按键功能,不在菜单列表中显示)、是否禁用(有些功能暂时不使用时,可以将它禁用掉)。除了之些之外,我们还需要增加菜单路由地址字段,用于存储当前菜单所绑定页面所需要使用到的路由地址项,比如说编辑菜单页面,我们在开发时需要先读取这条记录出来,然后再进行编辑,最后再提交,这里就会涉及到两个路由,一个是菜单记录读取的的路由,和菜单记录修改的路由,在做权限判断时,就可以权限当前操作页面与绑定的路由地址,跟权限信息进行比较,判断是否有操作权限,具体会在后面对应章节详细说明。由于我们前端使用的是jqGrid组件的树列表功能,组件要求服务器端在返回列表时,还需要返回树列表深度、当前节点是否是最终节点、当前节点是否展开三个字段,所以需要将它们加入菜单表中。

  根据这些要求,我们的菜单表的数据结构如下

  

  最终完成的菜单管理页面效果如下:

  

  部门表它相当于权限分组,可以根据企业的部门结构,创建对应的结构记录,这样也方便企业对系统权限关系更加容易理解。当然也可以根据需要设置虚拟部门出来管理。

  对于部门表,首先它也是树状关系,所以它跟菜单表结构基本类似。

  为了以后扩展需要,需要添加部门编码字段,编码从01开始一直累加到99,当然如果部门超过99个的话,要么增加到3位数,要么当前框架已不能支持业务的发展需要思考新的架构了。

  编码每增加一级,在01后面自动增加”0x“,编码的长度跟部门分级深度相关。

  下面是部门表结构,看起来好像是在菜单表的基础上删减了很多字段得来的一样。

  

  职位表是绑定在部门下的权限角色,它直接与菜单项进行关联,不同职位可以设置不同的权限(设置可查看与操作的菜单项)

  所以职位表需要存储与部门表的关联项:部门表id、部门编码、和部门名称(直接存储这个冗余字段,是为在需要显示职位所属部门时,不需要从部门表中关联查询,因为部门名称几乎设置后就不会再进行更改了)

  另外,它还需要拥有职位名称、菜单权限两个字段

  

  页面效果图:

  

  

  

  而管理员账号管理,主要管理的是后台管理员登录账号与密码,管理员的基本信息,还有操作权限。

  而权限的管理只需要绑定对应的部门与职位,在用户登录时就可以通过这个绑定获取对应的操作权限。

  一般来说,管理员账号需要记录:登陆账号、登录密码、登录密钥(如果需要通过APP端登录、需要对访问链接加密或是启用cookies验证登录的,需要这个字段来存储用户自己对应的密钥)、最后登录时间、最后登录id、登录次数、注册时间等信息

  而管理员的基本信息,则是根据不同企业的管理需求不同而不同,有的将人事管理也添加到系统中,则需要记录每个员工的所有基本信息,当然常用的信息有:用户中文名称、性别、出生日期、手机号码、邮箱、备注,大家根据需要自行添加或删减。

  而用户的权限相关字段,主要是绑定部门与职位,和工作状态和账号状态它些字段了。

  具体数据结构:

  

  页面效果图:

  

  

  做来管理系统,当然还需要记录管理员的所有操作记录,比如登录、退出、浏览了什么页面,操作过什么,所以还要增加一个管理员操作日志表,方便查看分析问题,分清责任

  

  权限管理数据表创建sql下载 (PS:为了方便操作,sql会将之前创建的manager表删除,然后重新添加admin管理员账号进去)

版权声明:本文原创发表于 博客园,作者为 AllEmpty 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

python开发QQ群:669058475(本群已满)、733466321(可以加2群)    作者博客:http://www.cnblogs.com/EmptyFS/

我的第一个python web开发框架(35)——权限数据库结构设计的更多相关文章

  1. 我的第一个python web开发框架(41)——总结

    我的第一个python web开发框架系列博文从17年6.7月份开始写(存了近十章稿留到9月份才开始发布),到今天结束,一年多时间,想想真不容易啊. 整个过程断断续续,中间有段时间由于工作繁忙停了好长 ...

  2. 我的第一个python web开发框架(14)——后台管理系统登录功能

    接下来正式进入网站的功能开发.要完成后台管理系统登录功能,通过查看登录页面,我们可以了解到,我们需要编写验证码图片获取接口和登录处理接口,然后在登录页面的HTML上编写AJAX. 在进行接口开发之前, ...

  3. 我的第一个python web开发框架(21)——小结

    这个小网站终于成功上线,小白除了收获一笔不多的费用外,还得到女神小美的赞赏,心中满满的成就感.这一天下班后,他请老菜一起下馆子,兑现请吃饭的承诺,顺便让老菜点评一下. 小白:老大,在你的指导下终于完成 ...

  4. 我的第一个python web开发框架(1)——前言

    由于之前经验不是很丰富,写的C#系统太过复杂,所以一直想重写,但学的越多越觉得自己懂的越少,越觉的底气不足.所以一直不敢动手,在内心深处对自己讲,要静下心来认真学习,继续沉淀沉淀.这两年多以来找各种机 ...

  5. 我的第一个python web开发框架(3)——怎么开始?

    小白与小美公司经过几次接触商谈,好不容易将外包签订了下来,准备开始大干一场.不过小白由于没有太多的项目经验,学过python懂得python的基本语法,在公司跟着大家做过简单功能,另外还会一些HTML ...

  6. 我的第一个python web开发框架(22)——一个安全小事故

    在周末的一个早上,小白还在做着美梦,就收到了小美的连环追魂call,电话一直响个不停. 小白打着哈欠拿起电话:早上好美女. 小美:出事了出事了,我们公司网站一早访问是一片空白,什么内容都没有了,你赶急 ...

  7. 我的第一个python web开发框架(4)——数据库结构设计与创建

    小白做好前端html设计后,马上开始进入数据库结构设计步骤. 在开始之前,小白回忆了一下老大在公司里培训时讲过的数据库设计解说: 对于初学者来说,很多拿到原型时不知道怎么设计数据表结构,这是很正常的事 ...

  8. 我的第一个python web开发框架(40)——后台日志与异常处理

    后台权限和底层框架的改造终于完成了,小白也终于可以放下紧悬着的心,可以轻松一下了.这不他为了感谢老菜,又找老菜聊了起来. 小白:多谢老大的帮忙,系统终于改造完成了,可以好好放松一下了. 老菜:呵呵,对 ...

  9. 我的第一个python web开发框架(37)——职位管理功能

    对于职位管理,我们可以理解它为角色权限的管理,就像前面所说的一样,有了职位管理,后台管理系统绑定好对应的权限以后,新进员工.离职或岗位调整,管理员操作起来就非常的便捷了,只需要重新绑定对应职位就可以做 ...

随机推荐

  1. slice全解析

    slice全解析 昨天组内小伙伴做分享,给出了这么一段代码: package main import ( "fmt" ) func fun1(x int) { x = x + 1 ...

  2. 正则表达式与H5表单

     RegExp 对象    exec 检查字符中是正则表达中的区域    text  检查内容  String 对象的方法    match    search    replace    splic ...

  3. asp.net core 系列 18 web服务器实现

    一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...

  4. C#版 - 226. Invert Binary Tree(剑指offer 面试题19) - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - 2 ...

  5. 【朝花夕拾】Android性能篇之(五)Android虚拟机

    前言 Android虚拟机的使用,使得android应用和Linux内核分离,这样做使得android系统更稳定可靠,比如程序中即使包含恶意代码,也不会直接影响系统文件:也提高了跨平台兼容性.在And ...

  6. 从零开始学习PYTHON3讲义(一)认识Python

    课程名称 从零开始PYTHON3 课程长度 15讲 适用年龄 15-20岁(初三-大一) 本讲名称 认识Python 时长 90分钟 教学内容分析 Python是时下最流行的计算机编程语言之一.本课程 ...

  7. Spring Boot分布式系统实践【1】-架构设计

    前言 [第一次尝试去写一个系列,肯定会有想不到的地方,欢迎大家留言指正] 本系列将介绍如果从零构建一套分布式系统.同时也是对自己过去工作的一个梳理过程. 本文先整理出构建系统的主要技术选型,以及技术框 ...

  8. JSP面试题都在这里

    下面是我整理下来的JSP知识点: 图上的知识点都可以在我其他的文章内找到相应内容. JSP常见面试题 jsp静态包含和动态包含的区别 jsp静态包含和动态包含的区别 在讲解request对象的时候,我 ...

  9. NLP入门(六)pyltp的介绍与使用

    pyltp的简介   语言技术平台(LTP)经过哈工大社会计算与信息检索研究中心 11 年的持续研发和推广, 是国内外最具影响力的中文处理基础平台.它提供的功能包括中文分词.词性标注.命名实体识别.依 ...

  10. PHP反射原理的实现

    反射 反射,直观理解就是根据到达地找到出发地和来源.我们可以仅仅通过一个光秃秃对象就能知道它所属的类.拥有哪些方法. 反射是指在PHP运行状态中,扩展分析PHP程序,导出或提出关于类.方法.属性.参数 ...