MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第二章:RBAC 权限系统设计
一、什么是 RBACRBAC 全称Role-Based Access Control基于角色的访问控制它的思想非常简单不给用户直接分配权限而是先给用户分配角色再给角色分配权限。例如张三 │ ▼ 管理员 │ ▼ 拥有所有权限或者李四 │ ▼ 普通员工 │ ▼ 查看订单 查看商品 不能删除数据二、为什么不用直接给用户分配权限假设公司有1000 名员工50 种权限如果直接分配张三 ├── 查看用户 ├── 删除用户 ├── 添加商品 ├── 删除商品 ├── 查看订单 ...1000 人都要单独维护权限。维护成本非常高。使用 RBAC管理员 ├── 查看用户 ├── 删除用户 ├── 添加商品 ├── 删除商品 运营 ├── 查看商品 ├── 修改商品 客服 ├── 查看订单 ├── 修改订单用户只需要绑定角色张三 ↓ 管理员如果管理员权限变化只修改一次管理员角色所有管理员立即生效。三、RBAC 的四个核心对象整个 RBAC 可以抽象成四张核心表User用户 Role角色 Permission权限 Menu菜单可选企业中最常见的是User ↓ Role ↓ Permission四、用户User用户就是登录系统的人。例如idusername1admin2tom3jack对应 SQLCREATE TABLE user( id BIGINT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50), password VARCHAR(255) );这里只保存登录账号密码手机号邮箱不要保存权限。五、角色Role角色代表一类人的身份。例如id角色1超级管理员2管理员3运营4客服5访客SQLCREATE TABLE role( id BIGINT PRIMARY KEY AUTO_INCREMENT, role_name VARCHAR(50), role_code VARCHAR(50) );例如role_code ADMIN USER OPERATOR程序一般判断role_code而不是role_name因为名称可以修改管理员 ↓ 系统管理员code一般不会变。六、权限Permission权限表示系统允许做什么。例如查看用户 新增用户 删除用户 修改用户 查看订单 删除订单SQLCREATE TABLE permission( id BIGINT PRIMARY KEY AUTO_INCREMENT, permission_name VARCHAR(100), permission_code VARCHAR(100) );例如permission_code user:list user:add user:delete order:list order:delete以后NestJSGuard就是判断permission_code七、为什么需要角色中间层很多新人会问为什么不能用户 ↓ 权限原因如果1000人。每个人50权限。需要50000条关系。修改非常困难。而用户 ↓ 角色 ↓ 权限权限只维护角色。维护成本极低。八、表之间关系现在开始画关系。一个用户可以有多个角色。例如Tom ↓ 管理员 ↓ 运营所以User和Role是多对多角色和权限也是多对多例如管理员拥有用户管理 商品管理 订单管理运营拥有商品管理 订单查看所以RolePermission也是多对多。九、为什么多对多不能直接存例如错误设计Userid username roleroleADMIN,USER问题SQL无法JOIN。无法建立外键。无法索引。违反第一范式1NF。所以需要中间表。十、User 与 Role多对多需要user_roleCREATE TABLE user_role( user_id BIGINT, role_id BIGINT );例如user_idrole_id111223表示用户1 ↓ 管理员 ↓ 运营十一、Role 与 Permission多对多同样建立CREATE TABLE role_permission( role_id BIGINT, permission_id BIGINT );例如role_idpermission_id111213十二、最终数据库结构最终RBAC数据库User │ │ │ User_Role │ │ Role │ │ Role_Permission │ │ Permission或者画得更完整一点--------- ------------- -------- | User |------- | User_Role |------- | Role | --------- ------------- -------- | | v ------------------ | Role_Permission | ------------------ | | v -------------- | Permission | --------------十三、企业后台权限流程用户登录输入账号密码↓查询user↓查询user_role↓查询role_permission↓得到permission↓生成JWT。以后每次请求判断permission_code例如user:add有允许。没有403。十四、本章总结表作用user用户role角色permission权限user_role用户角色关系role_permission角色权限关系核心关系User ↓ Role ↓ Permission都是通过中间表建立多对多关系。 本章核心一句话RBAC 的核心思想是用户拥有角色角色拥有权限通过角色作为中间层实现权限的统一管理和灵活扩展。本章思考题为什么 RBAC 不直接把权限分配给用户而要增加 Role角色这一层因为角色是权限的集合增加角色这一层可以实现权限的统一管理降低维护成本。为什么 User 和 Role、Role 和 Permission 都设计成多对多关系用户可以有多个角色角色可以有多个权限因此两者都需要设计成多对多关系。为什么多对多关系需要中间表而不能把多个角色直接存到一个字段中中间表符合数据库范式支持外键、索引和高效查询是实现多对多关系的标准方式。role_name和role_code有什么区别为什么程序更适合使用role_coderole_name 用于展示role_code 用于程序判断因为 code 稳定不会因业务名称变化而影响代码。如果一个用户同时拥有两个角色而两个角色都包含同一个权限最终这个用户应该拥有几次这个权限为什么多个角色的权限最终会取并集并自动去重同一个权限只会生效一次。

相关新闻

NAU8224与PIC32MZ音频系统设计与优化实战

NAU8224与PIC32MZ音频系统设计与优化实战

1. 为什么选择NAU8224与PIC32MZ2048EFM064组合在音频系统设计中,芯片选型往往决定了最终产品的音质表现和功能上限。NAU8224作为Nuvoton公司推出的高性能Class-D音频放大器,与Microchip的PIC32MZ2048EFM064这款基于MIPS架构的高性能MCU组合,能…

2026/7/13 22:28:04阅读更多 →
终极免费方案:轻松解锁WeMod专业版完整功能

终极免费方案:轻松解锁WeMod专业版完整功能

终极免费方案:轻松解锁WeMod专业版完整功能 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 还在为WeMod的专业版功能限制而烦恼吗&…

2026/7/13 22:28:04阅读更多 →
MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第一章:企业数据库设计规范

MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第一章:企业数据库设计规范

一、企业数据库设计流程企业开发一般遵循下面的流程:需求分析↓ 抽取业务实体↓ 分析实体之间关系↓ 设计表结构↓ 设计索引↓ 评审数据库设计↓ 正式建表例如:开发一个图书管理系统。需求:用户可以: 借书 还书 查看图书首先抽取实…

2026/7/13 22:28:04阅读更多 →
2026年版全球微通道液冷技术市场研究现状与应用前景展望分析报告

2026年版全球微通道液冷技术市场研究现状与应用前景展望分析报告

2026年版全球微通道液冷技术市场研究现状与应用前景展望分析报告微通道液冷技术是一种先进的热管理解决方案,通过在冷板或均热板上蚀刻或制造出密集排列的极窄流道——直径通常在数十至数百微米之间——并将其与 CPU、GPU 及 AI 加速器等高功率半导体器件紧密贴合&a…

2026/7/13 23:23:07阅读更多 →
UML 2.5 实战:3分钟用PlantUML绘制类图,5种关系一键生成代码

UML 2.5 实战:3分钟用PlantUML绘制类图,5种关系一键生成代码

UML 2.5 实战:3分钟用PlantUML绘制类图,5种关系一键生成代码在软件开发中,UML类图是系统设计阶段不可或缺的工具。传统的手动绘制方式不仅耗时耗力,而且难以维护更新。本文将介绍如何利用PlantUML这一文本化建模工具,快…

2026/7/13 23:23:07阅读更多 →
快速幂取模运算 5 个易错点解析:从数据溢出到边界条件处理

快速幂取模运算 5 个易错点解析:从数据溢出到边界条件处理

快速幂取模运算 5 个易错点解析:从数据溢出到边界条件处理1. 快速幂取模算法概述快速幂取模算法是计算大数幂取模的高效方法,广泛应用于密码学、算法竞赛等领域。其核心思想是通过二分法将时间复杂度从O(n)降低到O(logn),同时结合取模运算的性…

2026/7/13 23:23:07阅读更多 →
Visual Studio 2022 与 Qt 6.7 集成:5个常见配置陷阱及规避方法

Visual Studio 2022 与 Qt 6.7 集成:5个常见配置陷阱及规避方法

Visual Studio 2022 与 Qt 6.7 深度集成:5个关键配置陷阱与专业解决方案在跨平台C开发领域,Qt框架与Microsoft Visual Studio的组合一直是专业开发者的首选工具链。然而,当我们将最新版Qt 6.7与Visual Studio 2022集成时,往往会遇…

2026/7/13 23:23:07阅读更多 →
高精度ADC ADS127L11与PIC18F86J50的工业数据采集方案

高精度ADC ADS127L11与PIC18F86J50的工业数据采集方案

1. 项目背景与核心器件选型在工业测量和精密仪器领域,将模拟信号转换为高精度数字输出是一个经典而关键的课题。ADS127L11作为TI推出的24位ΔΣ型ADC,以其优异的性能组合成为精密数据采集系统的理想选择。这款器件在400kSPS采样率下仅消耗18.6mW功率&…

2026/7/13 23:23:07阅读更多 →
HoRain云--LangChain 模型调用拦截

HoRain云--LangChain 模型调用拦截

wrap_model_call 是中间件(Middleware)中最强大的钩子。wrap_model_call 不像 before/after 那样只是观察,而是可以完全控制模型的执行过程——重试、降级、缓存、甚至跳过模型直接用预设回复。理解 handler 回调wrap_model_call 的核心是一个…

2026/7/13 23:18:07阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/13 4:47:19阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/13 0:50:34阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/13 4:52:09阅读更多 →
卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

研究痛点提出(提出问题)重组肠激酶是融合标签切除核心工具酶,当前原核表达体系存在三大标准化难题,直接阻碍可复现的蛋白质分离纯化流程搭建:Trx、GST、单 SUMO 标签融合产物绝大多数为包涵体,沉淀占比超 9…

2026/7/13 0:04:58阅读更多 →
语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效

语音转文字工具AsrTools:让音频整理变得简单高效 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text …

2026/7/13 0:04:58阅读更多 →
Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改

Palworld存档编辑完全掌握:从零开始实现游戏数据可视化修改 【免费下载链接】palworld-save-tools Tools for converting Palworld .sav files to JSON and back 项目地址: https://gitcode.com/gh_mirrors/pa/palworld-save-tools 你是否曾经想要调整Palwor…

2026/7/13 0:04:58阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/13 4:21:17阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/13 4:08:53阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/12 21:43:43阅读更多 →