RBAC推荐入门到精通,这份后端学习路线请收好

2026-11-04 来源: 点击量

RBAC 从入门到精通:后端权限学习路线

RBAC 的核心不是“多写几张表”,而是把用户、角色、权限解耦:用户不直接绑定权限,而是通过角色获得权限。这样在人员变动、岗位调整、权限回收时,系统不会迅速失控。RBAC推荐入门到精通,这份后端学习路线请收好

1. 先搞懂 RBAC 在解决什么问题

没有 RBAC 时,用户和权限是网状绑定:一个用户可能有几十个权限,一个权限也可能分给很多人。人越多,越难维护,离职、转岗、临时授权都容易漏。

RBAC 把它变成:

用户 → 角色 → 权限

比如客服角色拥有“查看用户、查看订单、处理工单”,所有客服只要绑定这个角色即可。权限变更时,只需要改角色,不需要逐人修改。

2. 掌握 RBAC 四个层级

RBAC0 基础模型:用户、角色、权限三层关系,适合大多数后台系统。

RBAC1 角色继承:上级角色自动继承下级角色权限,适合有明确职级体系的团队。

RBAC2 角色约束:加入互斥角色、职责分离,比如会计和出纳不能由同一人担任。

RBAC3 综合模型:继承 + 约束 + 审计,适合金融、政务、医疗等高合规场景。

实战建议:90% 的企业后台,RBAC0 + 数据权限已经足够。

3. 数据库设计:至少五张表

典型结构是:

sys_user:用户表

sys_role:角色表

sys_permission / sys_menu:权限或菜单表

sys_user_role:用户与角色的多对多关系

sys_role_permission:角色与权限的多对多关系

权限标识建议统一命名,例如:

system:user:list

system:user:create

order:refund

finance:invoice:export

菜单、按钮、接口可以统一用一张权限表管理,通过类型区分:目录、菜单、按钮、API。

4. 后端落地:从拦截到缓存

后端权限校验通常走这几步:

用户登录,生成 Token 或 Session。

根据用户查询角色,再查询角色下的权限集合。

将权限集合缓存到 Redis,避免每次请求都查库。

接口层通过注解、中间件或 AOP 拦截请求。

比对当前接口需要的权限标识,例如 order:delete。

无权限则返回 403,有权限则继续执行业务逻辑。

Java 体系可以用 Spring Security、Shiro;Go 可以用中间件 + Casbin;PHP 也可以用 Casbin 做策略引擎。

5. 必须补上“数据权限”

RBAC 解决的是“能不能做”,数据权限解决的是“能看到哪些数据”。

常见数据范围:

仅本人数据

本部门数据

本部门及下级部门

指定部门

全部数据

实现方式通常是在查询 SQL 中动态拼接条件,例如自动加上 department_id = ? 或 creator_id = ?。注意这里要做 SQL 注入防护和字段白名单校验。

6. 进阶路线:从可用到可靠

权限缓存:用户权限放入 Redis,权限变更时主动失效。

最小权限原则:不要默认给管理员,按需分配。

角色不要过深:继承层级控制在 2-3 层,避免排查困难。

职责分离:敏感岗位设置互斥角色。

审计日志:记录权限变更、角色分配、越权访问。

灰度与审批:敏感权限变更走审批流,避免误操作。

7. 推荐学习顺序

先看 RBAC0 概念和五张表设计。

手写一个最简单的“用户-角色-权限”查询。

加上接口权限拦截。

加上菜单权限和按钮权限。

加上 Redis 权限缓存。

补上数据权限。

再考虑角色继承、互斥角色、审计日志。

最后了解 RBAC + ABAC 混合模型,比如用 OPA/Casbin 做动态策略。

相关文章
  • RBAC推荐入门到精通,这份后端学习路线请收好
    RBAC推荐入门到精通,这份后端学习路线请收好

    RBAC 从入门到精通:后端权限学习路线RBAC 的核心不是“多写几张表”,而是把用户、角色、权限解耦:用户不直接绑定权限,而是通过角色获得权限。这样在人员变动、岗位调整、权限回收时,系统不会迅速失控。1. 先搞懂 RBAC 在解决什么问题没有 RBAC 时,用户和...

  • RocketMQ总结详解:大厂面试必问的核心知识点
    RocketMQ总结详解:大厂面试必问的核心知识点

    RocketMQ 面试核心知识点总结RocketMQ 的核心不是背 API,而是理解它如何在高吞吐、高可靠、顺序性、事务一致性之间做取舍。下面按面试高频链路整理。1. 架构与四大组件NameServer:轻量路由中心,无状态、节点间不通信,Broker 定时上报路由,Producer/Consumer 从 NameServer...

  • Beego精选入门到精通,这份后端学习路线请收好
    Beego精选入门到精通,这份后端学习路线请收好

    Beego 精选入门到精通,这份后端学习路线请收好Beego 是国内 Go 生态成熟全栈 MVC 框架,适合快速开发 Web 门户、CMS、管理后台、RESTful API,内置 ORM、缓存、日志、配置、监控、定时任务,搭配 bee 脚手架,上手快、开箱模块齐全,是 Go Web 入门、企业内部系统开发的优...

  • Python缓存方案常见问题及解决方案大全
    Python缓存方案常见问题及解决方案大全

    Python 缓存方案常见问题及解决方案大全缓存不是“加一层就变快”,而是命中率、一致性、内存、并发、过期策略之间的平衡。下面按问题类型整理,适合排查和面试复盘。一、工具选错:lru_cache 并不适合所有场景问题functools.lru_cache 只能缓存函数返回值,参数必...

  • 一文搞懂JWT手册,别再停留在会用层面
    一文搞懂JWT手册,别再停留在会用层面

    JWT 最常见的误区,是把它当成“加密过的安全令牌”。实际上 JWT 只是自包含、可验签、URL 安全的声明载体;它的 Payload 只是 Base64URL 编码,任何人都能解码,所以安全重点不在“藏数据”,而在“签名、过期、存储、吊销和算法控制”。 一、JWT 的三段结构JWT 由三部...

  • Spring Cloud常见问题及解决方案大全
    Spring Cloud常见问题及解决方案大全

    Spring Cloud 常见问题及解决方案大全Spring Cloud 微服务项目里,问题通常集中在六类:服务注册发现、服务调用、配置中心、网关路由、熔断限流、分布式事务与链路追踪。下面按故障场景整理,方便排查。 一、服务注册与发现失败常见现象Nacos / Eureka 控制台看不到服...