day72 关于rbac组件的小部分面试题
rbac的权限组件 基于角色的权限控制
1.什么是权限?
url代表的就是一个权限
2.如何实现权限的控制?
表结构 以我们讲的课的内容为例
菜单表:
- title 标题
- icon 图标
- weight 权重
权限表:
- url 权限 这里要用到正则匹配 不加^$
- title 权限标题 展示分配
- name URL别名 效果 : 把权限扩展到按钮级别,就是我没有这个权限,就没有这个按钮,而且要加上unique,保证权限唯一
- menu 外键 关联到菜单表 Menu (1对多关系) 效果 : 选中默认展开
如果有menu_id, 说明是1级菜单下的2级菜单,如果没有,说明是普通的权限
-parent 外键, 通过关联到自己的id 属于自关联 , 效果 : 为了解决(当你选中2级菜单下的添加或编辑下,左侧菜单关闭,处于未选中状态)的问题
如果有parent_id, 说明1级菜单下的普通权限,如果没有,什么都不是
如果既没有menu_id,也没用parent_id, 说明是普通权限,而且也没有关联2级菜单
角色表:
- name 角色名称
- permission 外键 关联到权限信息表 (多对多关系)
用户表:
- user 用户名
-pwd 密码
-roles 外键,关联角色表 (多对多关系)
技术点 :
- 中间件 -process_request
1.获取当前的URL
request.current_menu_id=None
request.cbreadcurunb_list=[{'title': '首页', 'url': ' /index/ ' }]
2.白名单
from django.conf import settings
settings.xxx #不把白名单写死,下次修改直接才settings中修改即可
这里需要用到re模块,re.marth() # 从头开始匹配,匹配到一个就返回
3.获取登录状态
如果没有登录,redirect到login页面
4.判断是不是免认证的url
5.进行权限的校验
首先先获取到本用户的权限信息,我们之前将用户的权限信息保存到了session中,所以这里我们要获取需要从session中获取.
permision_dict = request.session[settings.xxx]
.get到id ,pid ,pname
判断有没有pid ,如果有,说明是子权限
request.current_menu_id=pid
如果没有pid.说明是父权限.
request.current_menu_id=id
request.cbreadcrumb_list.append({url:i[ url ], title : i [ title ] } )
6.return Httpresponse('没有权限')
- 登录
1.认证 通过ORM操作去数据库中校验用户名密码是否正确
2.认证成功后进行权限信息的初始化操作, init_permission(request,obj)
- 获取当前用户的权限信息
ORM
values()
permission__title 跨表操作
过滤权限为空的权限, filter(permissions__url__isnull=False)
去重 distinct()
- 构建权限和菜单数据结构
权限的数据结构
简单的控制 permission_list = [{ url : persission__url }]
非菜单权限归属 permission_list=[ url , pid , id ]
路径导航 permission_dict={ id : url , id , pid , title }
最终版 permission_dict = {name : {url , id, pid, title ,pname}}
菜单的数据结构
menu_list = [ {url , title , icon }]
menu_dict = {
一级菜单的id :{ title , icon , weight children :{ url , title , id }} }
- 保存权限和菜单的信息到session中
json序列化 数字当做字典的key 会变成字符串
settings
-模板
动态生成菜单
-inclusion_tag 自定义标签 返回一个HTML代码段
- 有序字典 OrderDict()
- sorted(可迭代对象,key=lamda x : x[xxx], reverse=True)
- 两次for循环
路径导航
- inclusion_tag
权限控制到按钮级别
day72 关于rbac组件的小部分面试题的更多相关文章
- rbac组件
创建新项目 新建一个项目untitled,注意django 版本为1.11 修改models.py,增加2个表 from django.db import models class Classes(m ...
- python 全栈开发,Day108(客户管理之权限控制,客户管理之动态"一级"菜单,其他应用使用rbac组件,django static文件的引入方式)
一.客户管理之权限控制 昨天的作业,有很多不完善的地方 下载代码,基本实现权限验证 https://github.com/987334176/luffy_permission/archive/v1.2 ...
- CRM rbac 组件的应用
1 拷贝 rbac 组件到项目中,注册这个app 2 数据库迁移 1 删除rbac下migrations里除了init外的文件 2 修改用户表 class User(models.Model): &q ...
- 应用rbac组件 动态生成一级菜单
动态生成一级菜单 改表结构 需要知道是否是菜单\icon\名称权限表 +字段: is_menu = models.BooleanField(max_length=32,verbose_name='是否 ...
- ch1-vuejs基础入门(hw v-bind v-if v-for v-on v-model 应用组件简介 小案例)
1 hello world 引入vue.min.js 代码: ----2.0+版本 <div id="test"> {{str}} </div> <s ...
- 详解封装微信小程序组件及小程序坑(附带解决方案)
一.序 上一篇介绍了如何从零开发微信小程序,博客园审核变智障了,每次代码都不算篇幅,好好滴一篇原创,不到3分钟从首页移出来了.这篇介绍一下组件封装和我的踩坑历程. 二.封装微信小程序可复用组件 首先模 ...
- rbac组件权限按钮,菜单,可拔插
1.通用模板 overflow: auto; //在a和b模板中进行切换 a 模板 :左侧菜单跟随滚动条 b模板 左侧以及上不动 **** <!DOCTYPE html> <h ...
- rbac组件引用
一. 批量操作思路 # 待新增 路由系统中有,但是数据库中还没有 路由系统的集合 - 数据库中权限集合 # 待更新 路由系统中有,数据库中也有, 只是更改了一些信息 路由系统的集合 & 数据库 ...
- 2、rbac组件 后台布局模板,权限按钮,菜单,可拔插,路径重定向
1.后台布局管理 https://www.cnblogs.com/venicid/p/7772742.html#_label0 1.通用模板 overflow: auto; //在a和b模板中进行切换 ...
随机推荐
- CDN和智能DNS原理和应用 (原)
CDN是什么? CDN的全称是Content Delivery Network,即内容分发网络. CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发.调 ...
- laravel 比较好的资料地址 看云
https://www.kancloud.cn/curder/laravel/408497
- bootstrap-wysiwyg这个坑
但是用wysiwyg也是费了我不少的精力,特别是在图片上传上,下面做一些总结. 1.引入文件 wysiwyg号称只有5kb,但是实际上是将其他的依赖文件在cdn上用外链链接进来了,有以下几个文件: c ...
- request.getParameter()获取不到数据
HTML中的form表单有一个关键属性 Content-Type=application/x-www-form-urlencoded 或multipart/form-data. 1. Content- ...
- vue用npm安装删除模块element-ui mint-ui
vue用npm安装删除模块element-ui mint-ui 在vue项目中先引入了element-ui,后来发现移动版的需要用mint-ui,所以需要先卸载了再安装.卸载element-ui:np ...
- 禁止chrome浏览器的缓冲图片以及css等资源文件
今天做了一个动画的效果,在ff下正常 但是到了谷歌下就不正常了,非常郁闷,看了下是缓存的问题 ,于是度娘了一下发现清理缓存的技巧还是满多的,这里借鉴一下别人的总结,人的大脑有限,下次忘记的时候还可以在 ...
- 一次Webservice请求的流程
- wget下载阿里云RDS备份集
[root@localhost tmp]# more wget.sh #!/bin/bash download_url=`python /tmp/geturl.py` echo $download_u ...
- opencv学习之路(27)、轮廓查找与绘制(六)——外接圆、椭圆拟合、逼近多边形曲线、计算轮廓面积及长度、提取不规则轮廓
一.最小外接圆 #include "opencv2/opencv.hpp" #include<iostream> using namespace std; using ...
- opencv学习之路(23)、轮廓查找与绘制(二)——访问轮廓每个点
一.简介 二.画出每个轮廓的每个点 #include "opencv2/opencv.hpp" using namespace cv; void main() { Mat src= ...