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模板中进行切换 ...
随机推荐
- GreenDao 使用和数据库升级
1使用方法 一.添加依赖 在bulid.gradle文件下的dependencies下添加所需依赖 compile 'org.greenrobot:greendao:3.2.2' // add l ...
- Centos下安装cassandra
一.环境准备 环境 Centos6.5 .安装有Java JDK(https://www.cnblogs.com/wt645631686/p/8267239.html这篇文章里有安装JDK1.8的教 ...
- wireshark抓包结果很多[TCP Retransmission]怎么办?
有一同事问用wireshark抓包时发现很多[TCP Retransmission],这些包极大影响了自己真正想看的http数据包,如下图. 我拿到pcapng后首先看到这些包的来源ip都是固定的两个 ...
- Linux统计系统文件类型出现的次数
awk '/^UUID/{fs[$3]++}END{for(i in fs) {print i,fs[i]}}' /etc/fstab /^UUID/ 匹配确定行范围
- rest_framework视图和组件
一.视图 1.基本视图 #基本视图 #抽取基类 from rest_framework.response import Response from rest_framework.views impor ...
- ant常用的内置 task转自https://www.cnblogs.com/baicj/archive/2015/12/21/5063608.html
ant 例如: <target name="callProjectB"> <echo message="In projectA calling proj ...
- Spring错误——Spring xml注释——org.xml.sax.SAXParseException; lineNumber: 24; columnNumber: 10; cvc-complex-type.2.3: 元素 'beans' 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”。
背景:配置spring xml,注释xml中文件元素 错误: Caused by: org.xml.sax.SAXParseException; lineNumber: 24; columnNumbe ...
- CF285E Positions in Permutations
思路 dp+二项式反演的神题 就是dp部分非常麻烦(好吧是我傻了 考虑先钦定m个满足条件的位置,这m个\(x_i\),只能放\(x_i-1\)或\(x_i+1\),然后其他的随便放(得出至少m个的方案 ...
- windows(xshell)免密码登录
windows(xshell)免密码登录 第一步生成密钥文件 打开xshell 选个工具栏的工具如下图 选择密钥类型和长度,如下图 密钥会自动生成,如下图,点击下一步即可 设置给密钥加密的密码也可以不 ...
- VR外包—长年承接虚拟现实项目和AR外包游戏、软件(北京动点飞扬软件)
VR外包AR外包公司(虚拟现实外包公司)承接虚拟现实项目开发(企业.教育.游戏) 可公对公签正规合同,开发票. 我们是北京的公司.专业团队,成员为专业 VR/AR 产品公司一线开发人员,有大型产品开发 ...