crm项目和权限管理流程:

应用权限组件到其他项目中:

  1. 拷贝rbac的APP到新的项目中,并且注册

     INSTALLED_APPS = [
      ...
         'rbac.apps.RbacConfig'
     ]
     
  2. 数据库迁移

    选择用户表

     class User(models.Model):
         # username = models.CharField(max_length=32, verbose_name='用户名', unique=True)
         # password = models.CharField(max_length=32, verbose_name='密码')
         roles = models.ManyToManyField(Role, verbose_name='用户所拥有的角色', blank=True)
     
         def __str__(self):
             return self.username
     
         class Meta:
             abstract = True  # 该model不会生成对应的表,专门做基类

    使用的用户表要继承rbac的User

     from rbac.models import User
     class UserProfile(User):
     

    执行数据库迁移的命令

     python  manage.py  makemigrations
     python  manage.py  migrate
  3. 在根的urlconf中分发rbac的urls.py

     
     urlpatterns = [
         url(r'^admin/', admin.site.urls),
      ...
         url(r'^rbac/', include('rbac.urls', namespace='rbac')),
     
     ]
  4. 录入信息

    http://127.0.0.1:8000/rbac/role/list/ 角色管理

    http://127.0.0.1:8000/rbac/menu/list/ 权限和菜单的管理

    http://127.0.0.1:8000/rbac/multi/permissions/ 批量录入权限

  5. 分配权限

    http://127.0.0.1:8000/rbac/distribute/permissions/

    替换用户表

    models.User ——》 UserProfile

    给角色分配权限

    给用户分配角色

  6. 在settings中配置权限的相关配置

     # 白名单
     WHITE_LIST = [
         r'^/login/$',
         r'^/reg/$',
         r'^/admin/.*'
     ]
     # 免认证的地址
     NO_PERMISSION_LIST = [
         r'^/index/$',
     
     ]
     
     # 存放权限的session的key
     PERMISSION_SESSION_KEY = 'permission'
     
     # 存放菜单的session的key
     MENU_SESSION_KEY = 'menu'
  7. 登录成功后进行权限信息的初始化

     from rbac.service.permission_init import permission_init
     permission_init(obj,request)
  8. 应用权限的中间件

     MIDDLEWARE = [
      ...
         'rbac.middlewares.rbac.RbacMiddleWare'
     ]
  9. 动态的二级菜单

     {% load rbac %}
     {% menu request %}
     
     引入 css 和 js
     <link rel="stylesheet" href="{% static 'rbac/css/menu.css' %} "/>
     <script src="{% static 'rbac/js/menu.js' %} "></script>
  10. 路径导航

     {% breadcrumb request %}
  11. 权限控制到按钮级别

     {% load rbac %}
     
     {% if request|has_permission:'edit_customer' %}
     
      <th>操作</th>
     {% endif %}
原文地址:https://www.cnblogs.com/zhang-da/p/12195266.html