权限管理设计分析以及具体细节guoyunlong666

说起权限我们大家都知道,不一样的角色会有不一样的权限。比如就像学生管理系统一样,管理员,老师,学生之间的权限都是不一样的,那么展示的页面也是不一样的。所以,我们现在来看看具体操作。

目标:生成一个独立的组件,到哪都能用

一、先创建一个项目,建一个app01和rbac的应用

1、先看配置文件合适不,给创建的rbac在配置文件里面设置一下找到INSTALLED_APPS=['rbac']

配置静态文件

二、表结构设计

2、设计表结构models中创建类:五个类,七张表角色表:用户表:权限表:

权限组表:

菜单表:

角色表和权限表是多对多的关系(一个角色可以有多个权限,一个权限可以对应多个角色)用户表和角色表是多对多的关系(一个用户可以有多个角色,一个角色有多个用户)

所以有会多生成两张关系表

一个菜单下面有多个组

一个组下面有多个菜单

一个菜单下面有多个权限

1、我们一般是先看到的是列表页面,在这个页面上是否显示添加,是否显示编辑,是否显示删除,都是需要判断的有无添加权限,有无删除权限,有无编辑权限,我们可以给每一个url一个代号

dict={1:{代号/userinfo/list/userinfo/add/add/userinfo/del(\d+)/del/userinfo/edit(\d+)/edit}}不仅在列表页面需要知道他有那些权限,在其他页面也知道他有那些权限所以上面的方案还是有点不好,那么我们采取下面的方案。将代号取出来放在一个列表里面

dict={1:{"codes":["list","add","del","edit"]urls:["/userinfo/","/userinfo/add"/,"/userinfo/del(\d+)/","/userinfo/edit(\d+)/",]}2:{"codes":{"list","add","del","edit"}urls:["/order","/order/add"/,"/order/del(\d+)/","/order/edit(\d+)/",]}}把这个字典存到session中当你访问页面的时候我就知道你有什么权限一个url对应一个code多个url对应一个组

注意:关联字段null=True数据库用的时候可以为空关联字段blank=Trueadmin用的时候可以为空当出现这个错误的时候

解决办法

pythonmanage.pymigrate--fake废弃三、通过django-admin录入权限数据

-先创建一个超级用户python3manage.pycreatesuperuser-用户名root-密码zhy123456-在admin.py中fromrbacimportmodelsadmin.site.register(models.Permission)admin.site.register(models.Role)admin.site.register(models.UserInfo)这样的话上去的是英文的,如果你想让中文显示就在类中加一个类classMeta:verbose_name_plural="权限表"-当你给关联字段录入数据的时候会有错误提示,那么在类中你的那个关联字段在加一个属性blank=True可以为空permissions=models.ManyToManyField(to="Permission",verbose_name="具有的所有权限",blank=True)

结构化数据:方便以后做操作。。。

dict={1:{"codes":["list","add","del","edit"]urls:["/userinfo/","/userinfo/add"/,"/userinfo/del(\d+)/","/userinfo/edit(\d+)/",]}2:{"codes":{"list","add","del","edit"}urls:["/order","/order/add"/,"/order/del(\d+)/","/order/edit(\d+)/",]}}5.拿到用户请求的url去session里面做验证获取当前请求的url获取session中保存当前用户的权限然后开始验证如果匹配成功就有权访问如果匹配不成功就无权访问用re去匹配的时候,re.match(/userinfo/,/userinfo/add)#都能匹配到那么要记得在匹配正则的时候加个起始符和终止符regex="^{0}$".format(url)deflogin(request):.....设置sessiondefindex(request):....获取sessiondefuserinfo(request):获取session这样如果有好多个函数,就的重复好多代码,我们可以用中间件来处理中间件和装饰器的区别:中间件用来做批量处理如果函数不多的话可以用加装饰器的方法

五、中间件:获取session,并且当用户匹配成功的时候,先把code保存在request中,方便以后判断

1、记得要配置白名单

2、必须继承MiddlewareMixin这个类

classMiddlewareMixin(object):def__init__(self,get_response=None):self.get_response=get_responsesuper(MiddlewareMixin,self).__init__()def__call__(self,request):response=Noneifhasattr(self,'process_request'):response=self.process_request(request)ifnotresponse:response=self.get_response(request)ifhasattr(self,'process_response'):response=self.process_response(request,response)returnresponse六、设计权限管理-----问题:在访问列表页面时,是否需要判断有无添加权限、有无删除权限、有无编辑权限。

views

defuserinfo(request):#方式一#Page_permission=request.permission_code_list#方式二:实例化page_permission=BasePagePermission(request.permission_code_list)print("page_permission",request.permission_code_list)data_list=[{"id":1,"name":"xxx1"},{"id":2,"name":"xxx2"},{"id":3,"name":"xxx3"},{"id":4,"name":"xxx4"},{"id":5,"name":"xxx5"},]returnrender(request,"userinfo.html",{"data_list":data_list,"page_permission":page_permission}在模板userinfo.html中:两种使用方式

方式一:

方式二:

2、怎么让这些菜单分级显示并且如果当前访问的url权限默认展开如果是组内菜单就加粗或者变红

3、非菜单url,默认选中原菜单。(如果你是点击用户列表进来的,那么你看到页面了,如果你点击添加的时候,你的那个用户列看不见了,这就不好了。所以要设计当你点击添加按钮的时候,那个用户列表被默认选中)

菜单管理菜单一用户管理权限管理菜单二订单管理角色管理

在表里面设计了一个组内菜单(自关联),当menu_gp_id为NULL就代表可以作为菜单

1、在初始化的时候,初始化权限信息,获取权限信息并放置到session中

menu_list=[]foriteminpermission_list:tpl={"id":item["permissions__id"],"title":item["permissions__title"],"url":item["permissions__url"],"menu_gp_id":item["permissions__menu_gp_id"],"menu_id":item["permissions__group__menu_id"],"menu_title":item["permissions__group__menu__caption"]}menu_list.append(tpl)request.session[settings.PERMISSION_MENU_KEY]=menu_list

因为是要在页面上渲染,一般我们会在视图函数的render里面加{"":变量}这样渲染,但是还有个更好用的方法:用自定义的标签

具体操作:1、找到app创建一个templatetags的文件夹2、然后在里面随便创建一个文件3、导入formdjango.templateimportLibraryregister=Library()

方式一:@register.simple_tagdefmenu():return"菜单"这里返回啥页面上就显示啥然后在母版里面导入mnue.html{%loadrbac%}

方式二:@register.includsion_tag("xxx.html")#这里存放的是html文件,,,@register.includsion_tag("xxx.html")自动会读这个文件并且把返回值拿到在页面上渲染defmenu():return"菜单"这里返回啥页面上就显示啥“在母版中:{%menu_htmlrequest%}request是参数,记得要加上{%loadrbac%}

4、注意:如果有两个文件夹同名,避免发生冲突:就再创建一个文件夹包起来

menu_list=[{'id':1,'title':'用户列表','url':'/userinfo/','menu_gp_id':None,'menu_id':2,'menu_title':'菜单二'},{'id':2,'title':'添加用户','url':'/userinfo/add/','menu_gp_id':1,'menu_id':2,'menu_title':'菜单二'},{'id':3,'title':'删除用户','url':'/userinfo/del/(\\d+)/','menu_gp_id':1,'menu_id':2,'menu_title':'菜单二'},{'id':4,'title':'编辑用户','url':'/userinfo/edit/(\\d+)/','menu_gp_id':1,'menu_id':2,'menu_title':'菜单二'},{'id':5,'title':'订单列表','url':'/order/','menu_gp_id':None,'menu_id':1,'menu_title':'菜单一'},{'id':6,'title':'添加订单','url':'/order/add/','menu_gp_id':2,'menu_id':1,'menu_title':'菜单一'},{'id':7,'title':'删除订单','url':'/order/del/(\\d+)/','menu_gp_id':2,'menu_id':1,'menu_title':'菜单一'},{'id':8,'title':'编辑订单','url':'/order/edit/(\\d+)/','menu_gp_id':2,'menu_id':1,'menu_title':'菜单一'}]②然后循环列表找出可以作为菜单的权限

{1:{'id':1,'title':'用户列表','url':'/userinfo/','menu_gp_id':None,'menu_id':2,'menu_title':'菜单二'},5:{'id':5,'title':'订单列表','url':'/order/','menu_gp_id':None,'menu_id':1,'menu_title':'菜单一'}}③再次循环列表向上边的字典中添加active

{1:{'id':1,'title':'用户列表','url':'/userinfo/','menu_gp_id':None,'menu_id':2,'menu_title':'菜单二','active':True},5:{'id':5,'title':'订单列表','url':'/order/','menu_gp_id':None,'menu_id':1,'menu_title':'菜单一'}}④结构化数据(吧上面得到的数据化成下面这样格式的,方便以后使用)

{1:{'menu_id':1,'menu_title':'菜单一','active':None,'children':[{'title':'订单列表','url':'/order/','active':None}]}2:{'menu_id':2,'menu_title':'菜单二','active':True,'children':[{'title':'用户列表','url':'/userinfo/','active':True}]},}

THE END
1.欢迎登录人力资源管理系统登录 技术支持:北京易普行科技有限公司 https://rs.wtc.edu.cn/base/frame/login_new.jsp?FM_SYS_ID=whzyjsxy
2.录入吧平台app2021最新版下载安装《录入吧》小编点评: 录入吧软件中简洁的界面也是让你更好的来认识这款软件中的相关内容,而且软件中便捷的搜索模式更是让你以最轻快的技巧来获得更多的资金奖励,还有很多实用的内容在不断的更新。 详细信息 应用大小:18.10 M 应用版本:v3.32.02 系统要求:安卓4.4 https://www.juxia.com/sjwy/ruanjian-249210.html
3.录入吧app下载安卓版安装录入吧app下载安卓版安装3.95.10录入吧app下载官网版安卓版安装(易速软件园提供下载)这是一款方便随时随地在网上去进行网赚的金融软件,有了这款软件,我们的用户就可以通过完成各种任务来赚取丰富的收益了,其中的超多赚钱任务都是设置的非常简单,是很方便我们的伙伴们来完成相关的任务去进行提现。每一个任务都是十分丰富,各种任务都是具有丰富的收益http://m.yisusoft.com/down/48944.htm
4.录入吧APP录入吧是由宿州市前景信息科技限公司运营的扁平化,智慧型,蜂窝群组模式的可开放扩展的众包服务平台,是众包服务领域里的先驱,是拥有千万作业下载量的众包服务平台。录入吧采用独特的工作方法,借助专业化分工,将时效短、工作量大的复杂任务,分解为若干简单、工作量较小http://ludanba.com/
5.录入录入平台打字录入17录入是一家免费提供众多网上打字赚钱任务包括快递录入,图片录入,打字录入,发票录入,DP录入,优加录入,信用卡录入,ems录入等真实可靠的正规网上兼职平台。https://17luru.com/
6.小说打字录入员app下载新版安装【小说打字录入员app】是一款非常给力的搜书软件,用户利用这款软件,可以轻松找到自己想找到的书籍,该软件功能强大,支持书籍分类,方便用户快速搜索自己喜欢的书籍,软件界面精美,需要的小伙伴还在等什么,快来下载试试吧,相信一定不会让你失望的。 小说打字录入员app说明 可以选择丰富的兼职内容,让用户在求职中有更多乐趣https://m.yxdown.com/pcgl/xin46964/
7.录入吧一、录入吧是不是骗局 录入吧不是骗局。 录入吧有很多简单的任务,可以让用户轻松赚钱。操作简单,这些任务的好处也是可观的。用户可以随意收集完成。在进度条app中,用户还可以随时查看自己的任务完成情况和收益,一目了然。如果要提现,也可以一键操作,秒到。 https://www.down1000.com/soft/games/maoxian/96431.html
8.快递录入APP下载2024最新版快递录入下载安装不仅如此,我们还为您提供个性化的推送服务,让您第一时间收到包裹的最新动态。下载我们的快递录入APP,让您的快递管理更加轻松便捷。不用再担心找不到包裹信息,不用再浪费时间去查找。只需轻轻一点,即可享受全新的快递录入体验。快来下载吧,让我们的APP为您的生活带来便利!https://www.wandoujia.com/bangdan/764133/
9.文字录入赚钱app大全文字录入赚取兼职合集快米打字app是一款非常真实靠谱的赚钱平台。平台上有很多任务发布心动的小伙伴们只需要简简单单打字就可,只需要简简单单打字就可,打开手机就可以直接领取任务,用户可以尽情畅玩,利用闲暇时间打字赚零花钱是没问题的。 查看 录入吧app手机版 推理解谜 v1.0.1 | 22.9MB 更新时间:2022-10-16 10:30:48 录入吧aphttps://www.liangchan.net/s/lcwzlrzqappdq/
10.小说录入吧网上小说录入 小说录入工具 小说文字录入 小说录音录入 应聘小说录入 福州小说录入 小说录入社 文字录入 小说 文字录入 小说 小说录入商家 offd录入小说 小说打字录入 招聘小说录入 录入小说稿 原创小说录入 小说录入下载 小说如何录入 小说录入赚 小说录入平台 app小说录入 小说原稿录入 录入小说文章 小说录入排版热门https://m.qidian.com/ask/tzfqbbpdybp
11.金多米打字录入app金多米打字录入app下载金多米打字录入app一款非常适合学生党的兼职软件每天就是打打字一用都会,不需要花一分钱的投资,轻松赚钱,平台为广大的学生党和宝妈族提供海量的打字赚钱任务,喜欢的小伙伴们快点来下载吧。 金多米打字录入app说明 用户需要将接单的打字任务图片上的内容全部打字到文档中; 当你完成之后你把文档上传到指定的地方就可以了https://www.100gsoft.cn/sjsoft/208321.html
12.录入吧没有作业怎么办多下载几个兼职的app 这个app兼职有没有钱 https://wen.baidu.com/question/466332654231374005.html
13.「天津河东区资料录入员/五险一金招聘」该职位已失效,看看其他机会吧 APP 微信扫码分享 举报 资料录入员/五险一金 4千-6千 天津河东区 经验不限 大专 全职 招2人 查看更多相似职位雇员点评标签 工作环境好 同事很nice 氛围活跃 团队执行强 人际关系好 交通便利 职位描述 资料管理office 工作职责: 1、负责资料数据等的录入、复核; 2、负责档案打印及https://jobs.zhaopin.com/CC617585820J40025304601.htm
14.利用猫框三层框架开发(C+B+App/Api/S)食堂管理项目成功案例特别是在中间层(API)简单快捷解决了CS、BS、APP间数据库交互,如此简单就解决了,不得不说利用猫框开发api接口的快捷便利性,用猫框的帐套工具+ 猫框的MSSQLhelper类来实现数据库交互,BS也好CS也吧还有APP都可以同时与数据库交互数据,写一个中间层的API就可以现实跨系统跨平台的数据交互,我的理解是C/S、B/S和https://cloud.tencent.com/developer/article/1861810
15.www.vita361.com/mokslip61238.html面对全区旧改资金缺口巨大压力,城阳区抢抓国家专项借款政策机遇,提前对接了解借款程序,对全区38个旧村在建项目逐项排列,有效提高项目申报的有效性和精准性。汇成合力协同作战。提前会同区属平台企业及银行梳理申报要件,明确责任单位,最终38个项目全部纳入全国第一批城中村专项借款项目大名单。全力推动借款落地。截至目前https://www.vita361.com/mokslip61238.html
16.小说打字录入员软件有哪些?五大实用小说录入员App血鸟导航【五大实用小说录入员App】你是不是也曾为小说打字录入而苦恼?每当看到一篇优秀的小说或者自己写的故事,想要录入到电脑里保存,却又被繁琐的打字流程所困扰。别担心,现在有了专门为小说打字录入设计的App,让你轻松愉快地完成这项工作。下面就让我来介绍一下五大实用小说录入员App。https://www.baobaocun.com/134463.html
17.橘子录入APPv3.7.8(中国)APP下载安装IOS/安卓通用版/手机app下载导语:橘子录入APP是一家备受瞩目的体育平台,提供丰富多样的体育赛事和刺激的游戏体验。如果您想加入橘子录入APP的大家庭,参与其中的乐趣,本文将为您详细介绍橘子录入APP的注册流程,让您轻松开启精彩的体育之旅。第一步:访问橘子录入APP官网首先,打开您的浏览器,输入橘子录入APP的官方网址(https://https://www.wenmi.com/gongyingliancaigoubugongzuojihua/
18.有哪些可以自己录入单词的app可以自己录入单词的app有哪些只要是学过英语的人都知道,英语是一门很难学的语言,除了要背单词之外,还要把语法和语音都记下来。那自己记词用的是什么软件?今天小编给你具体讲解,推荐几款可以自己录入单词的app,以便能够把自己不会的词汇记下来,从而更好地提高英语分数和英语等级,如果你也喜欢的话,不妨点击下载。 https://m.ali213.net/tag/ynxkyzjlrdcdapp.html
19.小说打字录入员是真的吗,打字接单的app软件哪个好今天跟大家说一下关于小说打字录入员这个兼职,很多人看到这样的兼职后都觉得小说那么赚钱,有录入员应该是很正常的,所以对于这个兼职也是比较信任的,现在我们来说说关于小说打字录入员的问题吧。 一、小说打字录入员是真的吗? 答案是假的。这个小说录入员的兼职就是骗子虚构出来的,这个骗局主要就是利用高收益容易赚钱作https://www.49498.cn/wzxw/5137.html
20.智能录入题库制作软件app试题通APP是一款智能导入题库的软件,它支持十余种常见题库文档格式,轻松快捷地导入题库。不论是选择题、填空题还是问答题,只需一键上传即可生成题库。 下载安装试题通APP 根据模板设置文档格式 将文档发送至文件传输助手 进入首页选择智能导入 选择文档开始智能识别 https://www.bilibili.com/read/mobile?id=29477444