rbac组件的使用

权限组件的应用
1. 拷贝rbac APP到新的项目中 并且要在settings中注册
2. 数据库迁移
1. 用户表的继承
rbac的models中的user表改为这样
class User(models.Model): """ 用户表 """ roles = models.ManyToManyField(Role, verbose_name='用户所拥有的角色', blank=True) #Role不用字符串的形式 用类的方式 class Meta: abstract = True # 当前的表不会在数据库中生成,用于作为基类,让子类继承
在要应用项目的models中的用户表继承这个rbac中的User表

2. 清除掉rbac下migrations的除了__init__之外的所有py文件

3. 执行数据库迁移的命令
![]()
1. 报这个错误时, 要在admin中取消注册这张user表

3. rbac的路由配置
项目中的url必须每个都设置别名
url(r'rbac/', include('rbac.urls',namespace='rbac')),
4. 权限信息的录入
录入角色
录入一级菜单
录入权限信息
容易出现录入没反应的信息,在views中添加 print(add_formset.errors) 打印错误,记得models中的字段长度要足够
![]()
批量操作 注意: 所有的url要有name
权限的分配
注意 使用正确的用户表
给角色分配权限
给用户分配角色
这时用的表为项目中的user表,所以要在views中将原来使用models.User的地方改为models.新表, from 项目app import 项目app的models
5. 应用上中间件
在settins中注册中间件
MIDDLEWARE = [ ... 'rbac.middlewares.rbac.RbacMiddleWare', ]
在settins中加上权限的相关配置
# ############## 权限的相关配置 ############## # 白名单 WHITE_LIST = [ r'^/crm/login/$', r'^/crm/reg/$', r'^/admin/.*', ] # 免认证的地址 需要登录 不行权限校验 NO_PERMISSION_LIST = [ '/crm/index/' ] # 权限的session的KEY PERMISSION_SESSION_KEY = 'permission' # 菜单的session的KEY MENU_SESSION_KEY = 'menu' # 保存二级菜单的id CURRENT_MENU_ID = 'current_menu_id'
6. 登录成功进行全新信息的初始化
在登陆成功的views地方 加上初始化登陆方法
from rbac.service.permission import init_permission 登陆成功后 init_permission(request,obj)

组件中有一个这个方法是忽略命名空间的,记得去掉
7. 应用二级菜单
{% load rbac %}
{% menu request %}
应用css js
<link rel="stylesheet" href="{% static 'rbac/css/menu.css' %} "/>
<script src="{% static 'rbac/js/menu.js' %} "></script>
8. 应用路径导航
{% breadcrumb request %}
9. 权限粒度控制到按钮级别
{% load rbac %}
{% if request|has_permission:'class_add' %}
<a class="btn btn-success btn-sm" style="margin: 3px" href="{% url 'class_add' %}"> <i
class="fa fa-plus-square"></i> 添加 </a>
{% endif %}

浙公网安备 33010602011771号