day72 关于rbac组件的小部分面试题

时间:2023-01-25 10:00:50

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组件的小部分面试题的更多相关文章

  1. rbac组件

    创建新项目 新建一个项目untitled,注意django 版本为1.11 修改models.py,增加2个表 from django.db import models class Classes(m ...

  2. python 全栈开发,Day108(客户管理之权限控制,客户管理之动态"一级"菜单,其他应用使用rbac组件,django static文件的引入方式)

    一.客户管理之权限控制 昨天的作业,有很多不完善的地方 下载代码,基本实现权限验证 https://github.com/987334176/luffy_permission/archive/v1.2 ...

  3. CRM rbac 组件的应用

    1 拷贝 rbac 组件到项目中,注册这个app 2 数据库迁移 1 删除rbac下migrations里除了init外的文件 2 修改用户表 class User(models.Model): &q ...

  4. 应用rbac组件 动态生成一级菜单

    动态生成一级菜单 改表结构 需要知道是否是菜单\icon\名称权限表 +字段: is_menu = models.BooleanField(max_length=32,verbose_name='是否 ...

  5. 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 ...

  6. 详解封装微信小程序组件及小程序坑&lpar;附带解决方案&rpar;

    一.序 上一篇介绍了如何从零开发微信小程序,博客园审核变智障了,每次代码都不算篇幅,好好滴一篇原创,不到3分钟从首页移出来了.这篇介绍一下组件封装和我的踩坑历程. 二.封装微信小程序可复用组件 首先模 ...

  7. rbac组件权限按钮,菜单,可拔插

      1.通用模板 overflow: auto; //在a和b模板中进行切换 a 模板 :左侧菜单跟随滚动条 b模板  左侧以及上不动 **** <!DOCTYPE html> <h ...

  8. rbac组件引用

    一. 批量操作思路 # 待新增 路由系统中有,但是数据库中还没有 路由系统的集合 - 数据库中权限集合 # 待更新 路由系统中有,数据库中也有, 只是更改了一些信息 路由系统的集合 & 数据库 ...

  9. 2、rbac组件 后台布局模板,权限按钮,菜单,可拔插,路径重定向

    1.后台布局管理 https://www.cnblogs.com/venicid/p/7772742.html#_label0 1.通用模板 overflow: auto; //在a和b模板中进行切换 ...

随机推荐

  1. 解决thinkPHP构造函数&lowbar;&lowbar;construct导致tp方法冲突问题

    我们在使用了__construct构造函数,覆盖了父类的构造函数,导致父类tp的方法无法使用,例如$this->display(),解决办法是: 在__construct函数中调用一下父类的构造 ...

  2. WPF技巧-Canvas转为位图

    转自:http://www.cnblogs.com/tmywu/archive/2010/09/14/1825650.html 在WPF中我们可以将Canvas当成一种画布,将Canvas中的控件当成 ...

  3. 安装安卓模拟器和unity3d插件EZGUI

    一.安装安卓模拟器 1.下载安卓模拟器http://www.pc6.com/softview/SoftView_64923.html: 2.安装安卓模拟器. 3.下载安卓apk,然后右键用BlueSt ...

  4. 被忽视的eMMC——A1 SD Bench闪存测试

    一直以来,大家对手机的配置方面都比较关注CPU和GPU的架构.频率.核心数等,却经常忽略了手机闪存的速度.实际上手机的闪存素质对手机日常操作的响应.载入速度同样起到举足轻重的影响,今天给大家介绍的则是 ...

  5. 将VIM配置成强大的IDE(三)

    上一节,我们知道了,我们了解了怎么配置插件的下下载. 现在,我们就可以去DIY我们的IDE了,主要介绍taglist插件和NERDTree插件,最终的结果是: 1.安装Taglist插件. Tagli ...

  6. thickbox 关于动态生成 无法跳出弹出框的问题

    问题描述: 用jQuery动态生成thickbox的连接代码,发现没有效果. 原因: thickbox在页面加载后,会给a,input,area等绑定弹出事件. 通过tb_init(’a.thickb ...

  7. redis&colon; 6379端口下set值时出现 CLUSTERDOWN The cluster is down

    1.使用./redis-trib.rb check 192.168.242.134:6379检查出现图中的错误 2.在redis安装目录的bin下执行下列命令去cluster meet 另一个端口为7 ...

  8. jquery考试纠错笔记&period;

    1. 获取元素范围大小顺序依次为: $(#one).siblings("div")>$("#one~div")>$("#one +div& ...

  9. Android Navigation使用

    简介 Navigation导航编辑器旨在简化Android开发中导航的实现,可以帮助我们很好的处理Activity和fragment之间通过FragmentTransaction交互的复杂性,也可以很 ...

  10. make编译

    Makefile 值得一提的是,在Makefile中的命令,必须要以[Tab]键开始. 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了 ...