1 拷贝 rbac 组件到项目中,注册这个app
2 数据库迁移
1 删除rbac下migrations里除了init外的文件
2 修改用户表
class User(models.Model): """ 用户表 """ # name = models.CharField(max_length=32, verbose_name=‘用户名‘) # pwd = models.CharField(max_length=32, verbose_name=‘密码‘) roles = models.ManyToManyField(Role, blank=True) # 关联用类 class Meta: abstract = True # 执行数据库迁移命令时不会生成具体的表,这张表做基类
在新项目中用户表要继承User表
之后执行数据迁移命令
3 在根的 urlconf 中添加 rbac 的路由
url(r‘rbac/‘, include(‘rbac.urls‘, namespace=‘rbac‘)) namespace -- 命名空间
4 角色管理 添加角色
5 菜单管理 给权重(改变菜单显示顺序)
6 权限管理
录入权限信息
分配好菜单和父权限
7 分配权限
给角色分配权限
给用户分配角色
8 加上权限的控制
加中间件
权限的配置放在settings中
# 权限存放在session中的KEY PERMISSION_SESSION_KEY = ‘permission‘ # 菜单存放在session中的KEY MENU_SESSION_KEY = ‘menu‘
# 白名单 WHITE_LIST = [ r‘^/login/$‘, r‘^/reg/$‘, r‘^/admin/.*‘, ] # 需要登录但是不要权限的名单 NO_PERMISSION_LIST = [ r‘^/index/$‘, ]
修改登录函数
校验成功后权限信息的初始化
from rbac.service.permission import init_permission # 登录成功后 init_permission(request,obj)
9 应用上二级菜单
母版中使用 menu inclusion_tag
{% load rbac %}
{% menu request %}
引入 css js 效果
10 路径导航 -- breadcrumb
{% breadcrumb request %}
11 权限控制到按钮
{% load rbac %} {% if request|has_permission:‘add_customer‘ %} <a class="btn btn-sm btn-primary" style="margin-bottom: 5px" href="{% reverse_url request ‘add_customer‘ %}">添加</a> {% endif %}
原文:https://www.cnblogs.com/zhangchen-sx/p/10459327.html