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模板中进行切换 ...
随机推荐
- CSS实现经典的三栏布局
实现效果: 左右栏定宽,中间栏自适应 (有时候是固定高度) 1 . 绝对定位布局:position + margin <div class="container"> & ...
- CentOS 7 使用SVN+Apache搭建版本控制服务器
svn简介 Subversion是一个免费/开源的版本控制系统, Subversion 可以跨越时间地对文件和目录, 以及它们的修改进行管理. 这就允许你恢复 数据的旧版本, 或检查数据的修改历史. ...
- Flip Game (高斯消元 || dfs)
Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 square ...
- androidstudio项目如何使用git版本回退
使用android studio 编写代码错误,有时可能会需要将项目版本回退到以前的某个版本上,这对于很多刚使用git的网友来说操作可能不是很懂,下面为大家整理了android studio 回退已经 ...
- 在CI (Jenkins) 从机(服务器)上使用bat批处理执行自动构建任务时,输出NuGet还原失败的解决方案
编译环境:Jenkins+MSBuilds 1.搜索本次构建的解决方案中的所有csproj后缀文件,打开后找到这一段代码,并且删除掉.如果没有,直接忽略跳过. <Import Project=& ...
- Google 开发的、最好用、功能最强大的网页测速与网站性能分析工具
https://www.webpagetest.org/细致到每一个资源的加载都是完全可视化,包含详细的数据分析.开发完成自己的网站后一定要进行一下测试,你会发现还有很多可以优化的点.
- Qt::WindowFlags枚举类型解析
在使用Qt设计的时候经常会看到QWidget控件的构造函数出现下面这样一句话: QWidget(QWidget *parent=0,Qt::WindowFlags f=0) QWidget *pare ...
- kernel: INFO: task sadc:14833 blocked for more than 120 seconds.
早上一到,发现oracle连不上. 到主机上,发现只有oracleora11g一个进程,其他进程全没了. Nov 14 23:33:30 hs-test-10-20-30-15 kernel: INF ...
- Bugku-CTF之变量1
Day9 变量1 http://123.206.87.240:8004/index1.php
- 利用JS打印质数
我爱撸码,撸码使我感到快乐!大家好,我是Counter,今天非常愉快,没有前几天的相对比较复杂的逻辑思维在里面,今天来写写,利用JS打印质数,基本上很多面试,会很经常的考到.那废话不多说,直接上代码: ...