rbac

Posted pythonz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rbac相关的知识,希望对你有一定的参考价值。

动态生成一级菜单:

model里修改字段为

技术图片

在登录查询用户时,将四个字段的信息都查询出来

并根据用户能够访问的网页权限和显示的菜单 blank表示页面输入可以为空 null=true 表示数据表可以为空

分为权限列表和菜单列表

permission_list

menu_list

权限信息用来验证用户能够访问的页面

菜单列表用来显示用户可以访问的页面

页面可以接受request

request.session.menu来得到ur,title,icon显示在页面上可以用for循环实现

一级菜单优化

在页面request.session.menu是写死了

创建templatetags包

里面my_tags.py

通过sample.inclusion.tags方法

写一个menu函数,再创建一个menu页面menu.html

里面讲request.session.menu内容复制进去

再在原页面写{%load my_tags%}

{%menu request%}导入

给访问的菜单加active属性

在menu函数里

因为知道要访问的页面url request.path_info

循环菜单列表时

如果这个菜单的url和访问页面相同时 用正则进行判断 re.match(item[url],request.path_info):

里面 item[‘class‘]=active加入active属性

在页面用menu.class显示

rbac功能整合

功能整合就是将rbac的所有函数,页面,css都拖到自己的rbac的app里,使rbac独立起来可以随时调用

应用rbac组件的流程

1.将rbac app直接拷贝进来

  在settings里注册rbac app

2 数据库的迁移

  1删除rbac下migrations下除init外的其他py文件

  2执行命令

3 录入权限信息 ,通过Django自带的admin页面

  1.首先创建超级用户

    python manage.py createsuperuser

  2.登录admin

    1.通过rbac里已经写完的角色,权限,用户信息

      录入权限信息 角色信息 用户信息

    2.分配对应的关系

4.登陆成功后调用权限初始化的函数permission

  通过permission将用的权限信息放入权限列表 菜单信息放入菜单列表

  from rbac.service.permission import init_permission

  init_permission(request,obj)  # 传入request和obj

5.在settings里注册权限的中间件

  MIDDLEWARE = [
        ‘rbac.middlewares.rbac.RbacMidlleware‘   
]

  通过rbac的request进行权限的验证

并将权限相关的配置写入settings里

# 权限存放在session中的KEY

PERMISSION_SESSION_KEY = ‘permission‘

# 菜单存放在session中的KEY

MENU_SESSION_KEY = ‘menu‘

# 白名单

WHITE_LIST = [     r‘^/login/$‘,    

r‘^/reg/$‘,    

r‘^/admin/.*‘, ]

6.将动态菜单加入到页面中应用到inclusion_tag

  {% load rbac %}
  {% menu request %}

  在页面里要导入菜单的静态文件

  1.menu.css

有一个母版页面,通过这个母版进行加入

 

  

     

以上是关于rbac的主要内容,如果未能解决你的问题,请参考以下文章

做网站-RBAC权限数据库设计

RBAC 基于角色的访问控制演示

Django项目中的实现rbac功能

k8s学习-基于角色的权限控制RBAC(概念,模版,创建,删除等)

k8s学习-基于角色的权限控制RBAC(概念,模版,创建,删除等)

产品经理必须掌握的权限模型