当前位置: 首页 > news >正文

【项目实践】—— 如何实现RBAC权限管理系统

在大型项目中,权限管理是一个非常重要的部分,它可以保证系统的安全性,防止未授权的访问和操作。

RBAC 全称 Role-Based Access Control基于角色的访问控制,是目前企业后台、SaaS 系统通用标准权限模型,核心思想:用户不直接绑定权限,通过「角色」中间层间接授权

链路:用户 User ---> 角色 Role ---> 权限 Permission

role

数据库表之间的关系如图所示:

image

 

整体数据流

  1. 用户登录 → 后端校验账号密码,返回 Token
  2. 前端携带 Token 请求 /getUserInfo 接口
  3. 后端根据用户 ID 查询关联角色 → 角色绑定的所有权限标识数组
  4. 后端返回:用户信息、角色列表、权限 perms 数组、动态菜单路由
  5. 前端存储权限数组,统一做路由拦截、按钮显隐控制

 

例:角色(Role)返回的信息,包括角色绑定的权限标识数组(permissions)

 1   admin: {
 2     id: '1',
 3     name: '管理员',
 4     code: 'admin',
 5     description: '拥有系统高级权限',
 6     permissions: [
 7       'dashboard:view',
 8       'user:view', 'user:create', 'user:edit', 'user:delete',
 9       'system:view',
10       'role:view', 'role:create', 'role:edit', 'role:delete',
11       'menu:view', 'menu:create', 'menu:edit', 'menu:delete',
12       'log:view',
13       'document:view', 'document:create', 'document:edit', 'document:delete'
14     ],
15     createdAt: '2024-01-01T00:00:00.000Z',
16     updatedAt: '2024-01-01T00:00:00.000Z'
17   }

 

前端权限控制的实现(基于React框架)
1. 封装一个自定义 usePermission Hook
 1 // 权限检查 Hook
 2 export const usePermission = () => {
 3   const { user, permissions, hasPermission, hasAnyPermission } = useAuthStore()
 4   
 5   return {
 6     user,
 7     permissions,
 8     can: (permission: string) => hasPermission(permission),
 9     canAny: (permissionList: string[]) => hasAnyPermission(permissionList),
10   }
11 }
12 
13 // 检查单个权限
14 export const checkPermission = (permission: string): boolean => {
15   const { hasPermission } = useAuthStore.getState()
16   return hasPermission(permission)
17 }
18 
19 // 检查多个权限(满足任一即可)
20 export const checkAnyPermission = (permissions: string[]): boolean => {
21   const { hasAnyPermission } = useAuthStore.getState()
22   return hasAnyPermission(permissions)
23 }

在具体页面中调用这个 Permission Hook,来实现页面的访问控制

1   const { can } = usePermission()
2   const canEdit = can('user:edit') // 只有具有编辑权限的用户才能编辑用户信息
3   const canDelete = can('user:delete') // 只有具有删除权限的用户才能删除用户

 

http://www.jsqmd.com/news/1282690/

相关文章:

  • 如何在5分钟内搭建免费私有搜索引擎:SearXNG Docker完整指南
  • Jetson Nano GPIO 引脚全解析:从硬件定义到 Python 控制实战
  • 石景山日常典藏奢品,养护优劣形成明显的参考数值落差 - 生活时报
  • 数字资本时代的精神生产、叙事殖民与文明再生产危机
  • 浦东27家中检认证实体店地址全公开|上海浦东专业回收爱马仕实体店铺中检认证|到店交易流程指南 - 讯息早知道
  • 硕士论文 AI 辅助写作:工具筛选方法,平衡效率、质量与学术规范要求 - 爱学习的肖博
  • 从“想太多”到“做出来”:我的Vibe Coding 30天实战心路(附小游戏案例)
  • 风电功率预测:神经网络优化与MATLAB实现
  • 净化本地交易环境:北京通州首饰回收乱象排查与合规选择 - 生活时报
  • redis持久化详解
  • 练习题:有1、2、3、4个数字,能组成多少个互不相同且不重复的三位数字?都是多少
  • 北京西城成套翡翠藏品,配套证书完整度优化藏品评估 - 生活时报
  • 使用dplyr高效处理时间序列数据的技巧与实践
  • 计算机毕业设计之基于SpringBoot的儿童图书借阅系统的设计与实现
  • MCP、Skill、Hook如何给大模型装上护栏
  • 破解激光锡膏炸锡难题:VAPS四维防控体系如何将不良率降至1%以下? - 汇聚至此
  • 告别社保运维难题!郑州企业一站式社保人力服务测评 - 优企甄选
  • 去水印小程序哪个稳定好用 2026 实测这几个免安装工具就够了 - 耶斯去水印
  • 基于Claude模型族的智能路由策略:平衡成本与质量的思考杠杆实践
  • 2026厦门漏水维修全攻略,卫生间/阳台/外墙/屋顶/地下室对症方案+靠谱商家推荐 - 苏易房屋修缮
  • 西方主流学术:一座以反真理为地基的垃圾堆——基于贾子理论的全景解剖
  • [深入解析C#] 第 10 章:简洁代码的特性“盛宴”
  • 企业级AI Agent实战:基于Hermes Agent与Harness Engineering构建金融问答机器人
  • Kali Linux SSH服务配置与安全加固:从22端口到远程管理
  • 2026实力之选:无锡展台设计搭建公司特装科技展台设计机构深度解析 - 品牌发掘
  • 并发工具之计数器CountDownLoach
  • 数据库设计2————需求分析
  • 中检持证鉴定师+无损检测|上海浦东专业回收爱马仕实体店铺 专业鉴定指南 - 讯息早知道
  • [深入解析C#] 第 12 章:分解与模式匹配
  • Agent 技术成熟度曲线:哪些是炒作、哪些真的能落地、明年会怎样