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模板中进行切换 ...
随机推荐
- 57.搭建Vue环境
nodejs官网http://nodejs.cn/下载安装包,无特殊要求可本地傻瓜式安装,这里选择2017-5-2发布的 v6.10.3 cmd命令行: node -v //显示node版本 v6.1 ...
- 组件式开发(Vue)
什么是组件式开发: 组件式开发就是将单个组件组合起来,形成一个大的组件进行页面的开发完成 什么是复合型组件: 复合型组件就是将相同的功能写成一个公用的组件(单元组件),供其他组件使用,就类似于后台开发 ...
- C#ImageList和ListView的使用
一.ImageList ImageList组件,又称为图片存储组件,它主要用于存储图片资源,然后在控件上显示出来,这样就简化了对图片的管理.ImageList组件的主要属性是Images,它包含关联 ...
- git 常用命令收集
1. 查看某文件的历史递交记录git log --pretty=oneline 文件名 2. 查看远程仓库信息 git remote show origin 3. 查看用户名和修改用记名: git c ...
- 创建servlet程序知识点详解---servlet-day05
jdbc.properties怎么写? 把秘密改为自己电脑设置的 password url 3306 是安装mysql时所确定的端口 后面还可以接字符集的限定 #1 jsp是什么?(java ser ...
- [c/c++] programming之路(25)、字符串(六)——memset,Unicode及宽字符,strset
一.memset #include<stdio.h> #include<stdlib.h> #include<memory.h> void *mymemset(vo ...
- linux --- 8. mysql数据库,redis 数据库
一. mysql 数据库 1.安装方式 ①yum安装 ②源代码编译安装 ③rpm包安装 yum安装的前提条件,是准备好yum源,可以选择163源,清华源,阿里云源,等等等 .安装mariadb的yum ...
- non-ZenoAndAcceptingLocation
PATTERN系列的番外篇 对non-Zeno的概念进行了明晰 accepting:if infinitely often the same state non-Zeno:if time diverg ...
- C# 图片缩略图
/// <summary> /// 生成缩略图 /// </summary> /// <param name="sourceFile">原始图片 ...
- FLEX外包团队:Flex例子DEMO源码
代码如下: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx=& ...