rbac组件引用
一. 批量操作思路
# 待新增 路由系统中有,但是数据库中还没有
路由系统的集合 - 数据库中权限集合
# 待更新 路由系统中有,数据库中也有, 只是更改了一些信息
路由系统的集合 & 数据库中的权限集合
# 待删除 数据库中有,路由中没有的
数据库权限集合 - 路由系统集合
二 . 权限组件的应用
1. 拷贝rbac APP到新的项目中 并且要在settings中注册
2. 数据库迁移
1. 用户表的继承
class User(models.Model):
"""
用户表
"""
# 这个Role一定不能是字符串,而且这个Role这张表一定要写到User的上边,这样从上到下加载的时候才能引用到这个类
roles = models.ManyToManyField(Role, verbose_name='用户所拥有的角色', blank=True) #Role不用字符串的形式 用类的方式
class Meta:
abstract = True # 当前的表不会在数据库中生成,用于作为基类,让子类继承
2. 清除掉rbac下migrations的除了__init__之外的所有py文件,而且admin中用到了User表也要注释掉
3. 执行数据库迁移的命令
3. rbac的路由配置
url(r'rbac/', include('rbac.urls',namespace='rbac')),
4. 权限信息的录入
录入角色
录入一级菜单
录入权限信息
批量操作 注意: 所有的url要有name
权限的分配
注意 使用正确的用户表
给角色分配权限
给用户分配角色
5. 应用上中间件
在settins中注册中间件
MIDDLEWARE = [
...
'rbac.middlewares.rbac.RbacMiddleWare',
]
在settins中加上权限的相关配置
6. 登录成功进行全新信息的初始化
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_tags %}
{% 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 %}