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 %}

posted @ 2019-03-25 22:12  robertx  阅读(461)  评论(0)    收藏  举报