DC's blog DC's blog
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)

DC

愿我一生欢喜,不为世俗所及.
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)
  • BBS

  • 订单平台

  • CRM

    • rbac

    • stark

    • crm

      • 基础业务处理
      • 客户管理
      • 学员管理
      • 权限应用
        • 基本权限校验
        • 粒度控制到按钮
  • flask+layui

  • django+layui

  • 供应链

  • 实战
  • CRM
  • crm
DC
2024-05-06
目录

权限应用

到目前为止,业务逻辑已经开发完毕了,接下来,需要与权限组件rbac进行整合!!

# 基本权限校验

咦?! 按照前面写的RBAC组件的使用文档一步步的来.. 大体上是对的!!

Step1: 将rbac组件拷贝项目, 并进行app注册
Step2: 将rbac组件中 的数据库迁移记录 全部删除.
Step3: 进行业务系统中用户表结构的设计. 遵循: 业务表结构中的用户表需要和rbac中的用户有继承关系
上述1,2,3步 在业务系统中的开发过程中就已经实现了. So,此时不用进行这三步诺.

# ======= 在这一系列的配置过程中,可能会报错html中通过{% url name %}反向生成url不成功,把name改对就好啦!这个不难滴.
■ settings.py中配置
  RBAC_USER_MODLE_CLASS = "apps.web.models.UserInfo"  # 业务系统中的用户表
  # !这里需要注意的是,我们使用的是业务系统中自己写的那一套登陆、登出、首页,没有用rbac组件里已经写好了的.
  # So,我们需要将rabc组件中 登陆、登出、首页相关的路由配置注释掉即可!!
  # 批量操作权限时,自动化发现路由中URL时,排除的URL
  AUTO_DISCOVER_EXCLUDE = [
      '/admin/.*',
      '/login/',
      '/logout/',
      '/index/',
  ]
■ 此时,rbac里的layout.html和stark里的layout.html关于侧边栏菜单以及面包屑导航的代码是注释掉的!!
  ★进行权限信息的录入
  - http://127.0.0.1:8000/rbac/menu/list/  
    添加一级菜单: 客户管理、学员管理、权限管理、基本业务管理
    添加二级菜单和非菜单权限,一个个的添加very very麻烦了!! 所以我们进行批量添加!
  - http://127.0.0.1:8000/rbac/menu/mutil/permissions/
    - 先在第一个面板 > 待新建权限列表 中将 自动发现的路由的名称都给写上!! 然后面板右上角的保存.
      Hhhh,该案例中63个路由,你都要写名称,避免不了的,只是你只会写这一次,后续就不用了,一劳永逸~
    - 因为在第一个面板中保存了,在第三个面板 > 待更新的权限列表中 对这一系列的路由进行菜单层级的分配!!
      1> 首先,我们要找到可成为二级菜单的路由,把它分配给上面添加的一级菜单.
         记得点击面板右上角的保存,这样的话,这些路由就成为了二级菜单啦!!
      2> 接着,我们对剩下的非菜单权限配置它们所属的二级菜单!
         ☆ 特别注意,需要根据业务逻辑来,记得点击面板右上角的保存!!
           举个例子:上课记录的列表页面是通过班级列表页面里的表格进行跳转过去的!
                   So,上课记录的CURD所属二级菜单应该就是班级列表!!
      3> 最后,你再次访问http://127.0.0.1:8000/rbac/menu/list/?mid=4&sid=26
         就可以点点点看看效果啦!!
■ - http://127.0.0.1:8000/rbac/role/list/  
  添加角色: 销售总监、销售、教质总监、班主任、CEO、任课教师
  - http://127.0.0.1:8000/stark/web/userinfo/list/  (不同的业务系统,该url可能会不同.视情况而定)
  添加用户,在进行业务系统开发的过程中,已经添加了些许用户,此步骤已完成.
■ 开始给角色分配权限、给用户分配角色!!
  http://127.0.0.1:8000/rbac/distribute/list/
  注意噢!页面上的勾选"角色列表"之类的,意思是具备 查看角色列表 的意思!!
■ 在业务系统的登陆逻辑中添加以下代码
  # -- must do it: 在用户登录成功后,执行该语句!!
  from apps.rbac.utils.initialize import init_permission
  init_permission(current_user, request)  # 用户权限信息的初始化
■ settings.py中配置
  PERMISSION_SESSION_KEY = "permission_url_list_key"  # 权限在Session中存储的key
  MENU_SESSION_KEY = "menu_list_key"  # 菜单在Session中存储的key
  # 中间件中配置
  MIDDLEWARE = [
    # ... ... ...
    'apps.rbac.utils.verify.RbacMiddleware',
  ]
  # 白名单,无需登陆即可访问
  VALID_URL_LIST = [
      '/login/',
      '/admin/.*',
      '/favicon.ico',
  ]
  # 需要登录但无需权限的URL / 登陆后的每个人都默认拥有的权限 / 登陆后不用做权限校验的路由
  NO_PERMISSION_LIST = [
      '/index/',
      '/logout/',
  ]
■ rbac里的layout.html和stark里的layout.html 都需要进行下面的操作!
  1> {% load side_menu %}
     {% load breadcrumb %}
  2> 侧边栏菜单以及面包屑导航的代码把注释取消掉!
  注意噢!! 一般情况下,业务系统的html继承的是stark组件里的layout.html;rbac组件里的继承的是rbac组件里的layout.html
  html页面继承时使用的哪个,你得通过 app注册顺序、以及路径(eg:{% extends 'rbac/layout.html' %})来思考判断!!
  
至于粒度控制到按钮,与前面写的文档些许有点不同,下一小节会详细阐述会怎么实现!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

接下来就是见证奇迹的时刻!!
用户只会在侧边栏中显示自己所拥有的权限对应的那些菜单!!
下方的截图登陆的用户的角色CEO,拥有所有的权限,所以它的侧边菜单是全的!

1>

image-20240506161011668

2>

image-20240506160923728

3>

image-20240506160848458


# 粒度控制到按钮

新增、编辑、删除 没有对应的权限, 那么对应的按钮在页面上都不应该显示!!

前面写的rbac组件使用文档中对于粒度控制到按钮,需要在每个按钮中进行判断,很麻烦很麻烦.

下面是一个示例!! (要想实现粒度到按钮的控制,我们自定义的每个handler都需要继承PermissionHandler!!

image-20240506174817108

粒度控制到表格的列.. 略.


学员管理
初始化

← 学员管理 初始化→

最近更新
01
deepseek本地部署+知识库
02-17
02
实操-微信小程序
02-14
03
教学-cursor深度探讨
02-13
更多文章>
Theme by Vdoing | Copyright © 2023-2025 DC | One Piece
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式