我的第一个python web开发框架(35)——权限数据库结构设计
接下来要做的是权限系统的数据库结构设计,在上一章我们了解了权限系统是通过什么来管理好权限的,我们选用其中比较常用的权限系统来实现当前项目管理要求。
下面是我们选择的权限系统关系模型:
从以上关系可以看到,用户登录成功以后,通过读取管理员账号信息获取当前管理员所在部门与职位,读取职位中的权限信息。进入系统以后,通过职位权限信息筛选出显示的菜单项;访问各功能页面并进行增删改查操作时,通过权限信息判断当前管理员是否有操作权限,从而实现对系统管理员操作权限的控制。下面分别解说一下各数据表的用途。
菜单表是用来注册(绑定)菜单、管理页面和接口用的,没有将接口和菜单项添加到菜单表的话,程序是不清楚有那些菜单项和接口的,菜单项与接口之间存在什么相的关系。
所以需要在开发时,手动将它们添加到菜单表中,才能对各功能进行对应的管理。
在开始设计菜单表之前,大家要思考的是,我们需要存储什么信息,它们之间有什么关联,每个字段有什么用途,为什么要增加这个字段或减少这个字段?
对于菜单表字段,多数字段大家都很容易定下来,比如说菜单名称、菜单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)——权限数据库结构设计的更多相关文章
- 我的第一个python web开发框架(41)——总结
我的第一个python web开发框架系列博文从17年6.7月份开始写(存了近十章稿留到9月份才开始发布),到今天结束,一年多时间,想想真不容易啊. 整个过程断断续续,中间有段时间由于工作繁忙停了好长 ...
- 我的第一个python web开发框架(14)——后台管理系统登录功能
接下来正式进入网站的功能开发.要完成后台管理系统登录功能,通过查看登录页面,我们可以了解到,我们需要编写验证码图片获取接口和登录处理接口,然后在登录页面的HTML上编写AJAX. 在进行接口开发之前, ...
- 我的第一个python web开发框架(21)——小结
这个小网站终于成功上线,小白除了收获一笔不多的费用外,还得到女神小美的赞赏,心中满满的成就感.这一天下班后,他请老菜一起下馆子,兑现请吃饭的承诺,顺便让老菜点评一下. 小白:老大,在你的指导下终于完成 ...
- 我的第一个python web开发框架(1)——前言
由于之前经验不是很丰富,写的C#系统太过复杂,所以一直想重写,但学的越多越觉得自己懂的越少,越觉的底气不足.所以一直不敢动手,在内心深处对自己讲,要静下心来认真学习,继续沉淀沉淀.这两年多以来找各种机 ...
- 我的第一个python web开发框架(3)——怎么开始?
小白与小美公司经过几次接触商谈,好不容易将外包签订了下来,准备开始大干一场.不过小白由于没有太多的项目经验,学过python懂得python的基本语法,在公司跟着大家做过简单功能,另外还会一些HTML ...
- 我的第一个python web开发框架(22)——一个安全小事故
在周末的一个早上,小白还在做着美梦,就收到了小美的连环追魂call,电话一直响个不停. 小白打着哈欠拿起电话:早上好美女. 小美:出事了出事了,我们公司网站一早访问是一片空白,什么内容都没有了,你赶急 ...
- 我的第一个python web开发框架(4)——数据库结构设计与创建
小白做好前端html设计后,马上开始进入数据库结构设计步骤. 在开始之前,小白回忆了一下老大在公司里培训时讲过的数据库设计解说: 对于初学者来说,很多拿到原型时不知道怎么设计数据表结构,这是很正常的事 ...
- 我的第一个python web开发框架(40)——后台日志与异常处理
后台权限和底层框架的改造终于完成了,小白也终于可以放下紧悬着的心,可以轻松一下了.这不他为了感谢老菜,又找老菜聊了起来. 小白:多谢老大的帮忙,系统终于改造完成了,可以好好放松一下了. 老菜:呵呵,对 ...
- 我的第一个python web开发框架(37)——职位管理功能
对于职位管理,我们可以理解它为角色权限的管理,就像前面所说的一样,有了职位管理,后台管理系统绑定好对应的权限以后,新进员工.离职或岗位调整,管理员操作起来就非常的便捷了,只需要重新绑定对应职位就可以做 ...
随机推荐
- HashMap? ConcurrentHashMap? 相信看完这篇没人能难住你!
前言 Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据. 本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 ...
- 使用Spring Cloud搭建服务注册中心
我们在之前的博客中已经介绍过阿里的分布式服务框架dubbo[Linux上安装Zookeeper以及一些注意事项][一个简单的案例带你入门Dubbo分布式框架],但是小伙伴们应该也看到了,阿里的dubb ...
- pyhive 连接 Hive 时错误
一.User: xx is not allowed to impersonate xxx' 解决办法:修改 core-site.xml 文件,加入下面的内容后重启 hadoop. <proper ...
- 网络设备配置与管理(华为)基础系列 :VLAN故障排除和GVRP
一.VLAN故障排除 故障排除的三步骤:故障定位 → 分析故障 → 排除故障 一般情况下,网络设备配置的故障有两种排错方式 A.静态排错:主要靠display查看配置信息的方式进行 在相关vlan下d ...
- 前端笔记之jQuery(下)事件&节点操作&净位置&拖拽&页面卷动值&遍历JSON
一.监听事件大全 1.1 JavaScript事件 onblur 元素失去焦点 onchange 用户改变域的内容 onclick 鼠标点击某个对象 ondblclick 鼠标双击某个对象 onfoc ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(三):搭建jenkins集群环境
写在前面 大家可以看到本文的配图,左边是jenkins单机环境,右边是jenkins集群.个中区别,不言而喻,形象生动. 前面我分别介绍了.net core 程序的多种部署方式(无绝对孰优孰劣): 1 ...
- windows下用cmd命令netstat查看系统端口使用情况
开始--运行--cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选&qu ...
- [二十四]JavaIO之PrintWriter
功能简介 PrintWriter 向文本输出流打印对象的格式化表示形式 他与PrintStream的逻辑上功能目的是相同的--他们都想做同一件事情--更便捷的格式化打印输出 Print ...
- Mac下charles安装及配置
一.下载地址 https://www.charlesproxy.com/download/ 激活码 Registered Name: https://zhile.io License Key: 488 ...
- 算法工程师想进一步提高竞争力?向TensorFlow开源社区贡献你的代码吧
算法工程师为什么也要向社区贡献代码? [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] “做算法的人要熟悉算法框架源码吗?算法工程师难 ...