推翻传统 RBAC:试试全新更灵活更优雅的权限机制后台管理框架

0 阅读15分钟

在国内 Java 后台管理领域, RuoYi 几乎已经成了“事实标准”。

但如果你真的深度做过一次权限改造、二次开发、跨平台适配,你大概率也会和我一样,产生一个问题:

”我们到底是在用 RuoYi,还是被 RuoYi 限制住了?”

声明:本文章并没有恶意贬低RuoYi框架,只是发表一下个人的看法,感谢RuoYi框架长时间的免费开源,为开源社区做出的巨大贡献

一、RuoYi的成功,也是它的枷锁

先说一句实话:RuoYi 并不差,它解决了 80% 的通用问题,它为很多个人开发者、小团队、初创公司等提供了方便快捷的途径。

  • 用户管理
  • 角色管理
  • 菜单权限
  • 基于 RBAC 的接口控制

这些对 传统单体后台 来说,完全够用。在 部门结构相对扁平、业务模块相对内聚、用户身份相对单一 的场景下,这套模型简洁、清晰,且完全够用。

但时代已经变了,而它的权限模型没有变。

它的“成功”背后,隐藏着四重枷锁:

  1. 模型僵化,难适应现代业务架构 在多租户 SaaS、平台型产品、复杂组织层级(如集团-子公司-部门)等场景下,传统 RBAC 的角色爆炸问题日益凸显。权限往往需要与数据维度(如所属机构、项目、地域)动态关联,而 RuoYi 静态的角色-权限绑定难以实现 “同一角色,不同数据可见范围” 的细粒度控制。

  2. 扩展性不足,牵一发而动全身 系统初期围绕 RBAC 的硬编码逻辑,随着业务多样化逐渐渗入各个模块。任何试图引入 ABAC(基于属性的访问控制)或 RBAC 与 ACL 混用的改造,都容易引发大规模重构,导致团队陷入 “改不动,也不敢改” 的窘境。

  3. 缺乏对“资源”与“环境”的动态感知 现代应用中,权限判断常需结合上下文:时间、操作对象状态、用户所属部门、资源敏感级别等。RuoYi 原生的权限模型缺少对动态策略的支持,往往只能通过业务代码“打补丁”,破坏了系统的纯粹性与可维护性。

  4. 技术债积累与团队思维定式 许多基于 RuoYi 衍生的项目在早期追求快速上线,将业务逻辑与权限代码深度耦合。随着团队扩大与业务复杂化,这种耦合逐渐转变为 “隐形的架构债务”,限制了团队对微服务、领域驱动设计等现代架构演进的探索能力。

RuoYi 是一把得心应手的“锤子”,但在面对螺丝、卡扣、胶合等多种连接需求时,仍然只用锤子——就显得捉襟见肘了。它代表了某一时代背景下“足够好”的解决方案,却也因其广泛的应用与固化的设计,无形中延缓了许多项目向更灵活、更细粒度、更动态的权限体系演进的速度。

二、传统 RuoYi 权限模型,本质只有一层

RuoYi 采用了经典的 RBAC 模型,其核心逻辑简单而直接:

用户 → 角色 → 菜单 / 权限

在这一体系中,权限被完全等同于菜单结构,形成了强制的一对一映射:

  • 页面入口 ≈ 权限标识
  • 按钮操作 ≈ 权限标识
  • 后端接口 ≈ 权限标识

于是你会看到系统内产生了这样的扭曲:

  • 一个普通的“导出按钮”,必须在菜单表中创建为一个虚拟节点
  • 每个 API 接口都需要在菜单树中找到一个挂载点
  • 没有菜单,就没有权限——即使该权限与界面展示毫无关系

权限的语义,被 UI 结构彻底绑架,这在现代应用开发中逐渐显露出根本性的局限。 这在今天是非常致命的。

权限颗粒度被模型所困,无法自然生长

当你尝试实现以下场景时,问题会集中爆发:

  • API 级别的独立权限控制
  • UI 组件级的动态显隐
  • 数据行级或字段级的访问隔离
  • 基于上下文的条件权限(如:仅处理自己部门的订单)
  • 动态策略权限(如:工作流节点审批权限)

你会发现: RBAC + 菜单绑定的单层模型,根本兜不住现实业务的复杂性 于是项目开始滑向“魔改”的深渊:

数据库层面:添加各种ext_字段,建立临时映射表

代码层面:在注解上叠加自定义参数,侵入业务逻辑

前端层面:硬编码判断逻辑,权限与组件逻辑深度耦合

最终状态:权限逻辑散落各处,无人敢轻易改动——系统进入维护的深水区

多终端、多平台场景下的灾难性适配

当系统从单一后台演变为多端平台时:

管理后台(PC)   ←  传统菜单权限尚可应付
↓
微信小程序       ←  菜单概念开始模糊
↓
移动端App        ←  权限与导航彻底解耦  
↓
对外OpenAPI     ←  菜单模型完全失效
↓
第三方集成      ←  需要独立的权限体系

菜单型权限模型,在多平台架构下成为适配的灾难:

不同终端对“权限”的定义不同(管理 vs 使用 vs 集成)

同一权限在不同平台可能需要不同的表达方式

前端路由与后端权限被迫强耦合

每增加一个终端,就要重新设计一次权限映射

最本质的问题:权限从“能力”退化为“配置负担”

在 RuoYi 的设计哲学中:

  • 权限配置不是为了表达系统能力
  • 而是为了满足框架的结构要求

这种本末倒置导致:

权限越多 → 菜单树越臃肿 → 配置越繁琐
↓
权限越细 → 角色定义越复杂 → 维护成本指数上升
↓
开发越恐惧添加新权限 → 业务需求被技术债务压制

最终,权限系统不再赋能业务,反而成为业务创新的障碍——开发者在每次添加新功能时,首先要思考的不是“这个功能如何设计”,而是“这个权限如何在现有框架里塞进去”。

这种设计本质上是一种“架构的偷懒”:用 UI 的思维方式解决安全领域的问题,就像用门禁卡系统管理国家机密一样——它能控制谁进入大楼,但无法控制进入后能看哪些文件、能操作哪些设备。

RuoYi 的权限模型服务于一个已经过去的时代,在那个时代里,系统是封闭的,用户是单一的,业务是线性的。但在今天这个开放、多元、动态的数字世界里,我们需要的是能随业务呼吸的权限系统,而不是让业务去适应权限框架的束缚

三、我们为什么要重新设计一套后台管理框架?

在真实的企业级开发过程中,我们逐渐发现: 问题不在于 RuoYi 做得不好,而在于它代表的是“上一代后台框架的设计思路”。

随着系统规模、团队结构、业务复杂度的变化,传统后台框架逐渐暴露出一些无法忽视的问题: • 权限模型僵化,扩展成本高业务逻辑与权限、菜单强绑定,牵一发而动全身安全能力更多停留在“有”,而不是“体系化”对前后端分离、多端接入、微服务演进支持不足

这正是 JunoYi 后台管理系统框架 诞生的背景。

RuoYi解决了“从无到有”的问题,但企业数字化转型面临新挑战:

四大痛点: 权限不够用 - 现代业务需要数据级、条件级权限控制 架构难演进 - 从单体到微服务缺乏平滑过渡方案 安全不体系 - 零散的安全功能无法应对合规要求 多端难统一 - 不同终端需要重复实现权限逻辑

RuoYi的局限: 权限模型绑定菜单结构,扩展必“魔改” 架构耦合度高,拆分微服务如同重建 安全能力停留在“有没有”,缺乏纵深防御 前后端强绑定,多端适配成本高昂

JunoYi的定位: 不是替代RuoYi,而是提供下一代解决方案:

  • 分层权限体系 - 界面、操作、数据权限解耦
  • 渐进式架构 - 支持从单体到微服务平滑演进
  • 体系化安全 - 从认证到审计的完整链条
  • 多端友好 - 统一权限模型,适配不同终端
  • 开发友好 - 降低复杂权限的接入成本

一句话:JunoYi为企业级应用而生,支持从小型项目到复杂系统的自然生长。

四、JunoYi 后台管理框架整体演示

在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

JunoYi 并不是一个概念框架,而是一套已经完整落地、可直接使用的后台管理系统。

这是一个你 拉下来、跑起来、就能直接二次开发的框架,而不是 Demo。

五、权限不再“绑架”菜单 —— 全新的权限设计演示

在 JunoYi 后台管理框架中,权限不再与菜单进行强绑定,而是被抽象为独立、纯粹的能力标识。

在这里,权限本身只是一个字符串,例如「系统管理」-「权限组管理」-「权限池」 在这里插入图片描述在这里插入图片描述 权限不再复杂,权限大道至简——权限标识符仅字符串而已,例如:

system.ui.menu.view
system.ui.user.view
system.api.menu.list
system.api.user.create

权限不关心它被谁使用、作用在哪个界面,它只描述:

  • 是否允许看见某个菜单页面。
  • 是否允许能看到前端UI组件(包括常见的按钮,使用v-permission指令)
  • 是否允许调用某个API接口
  • 是否允许读或写某个类对象指定字段

JunoYi 引入了 权限组(Permission Group) 作为权限管理体系的核心载体,而不是传统的「角色中心制」。

权限组的设计理念 • 所有权限字符串统一维护在 权限池 中 • 权限通过 权限组 进行组织与复用 • 权限组可以灵活绑定到: • 用户 • 角色 • 部门

这种设计,使权限体系具备了极强的: • 扩展性 • 组合能力 • 业务适应能力

权限只需要定义一次, 使用方式却可以在不同业务场景中无限扩展。

权限组的可视化管理体验

拖拽式分配权限标识符

权限组支持通过拖拽方式进行权限分配, 无需手动输入权限字符串,大幅降低使用成本。

权限组可以通过拖拽方式,轻松分配权限标识符 权限组所使用到的权限字符标识符,全部来自权限池中的对系统权限的声明:

在这里插入图片描述 用户单独分配权限组 在「系统设置」-「用户管理」-「操作」-「分配权限组」可以单独给用户分配指定权限组。 在这里插入图片描述

角色分配权限组 同用户分配权限组一样。 在这里插入图片描述

部门分配权限组 同上一样。 在这里插入图片描述 用户独立权限分配 除了常规权限组分配权限外,这里还考虑到一种特殊场景,某个用户单独需要指定权限;在这里,如果某个用户只单独需要一个权限,并不需要单独再创建一个权限组,只需要给用户 分配独立权限

在「系统管理」-「用户管理」-「操作」-「独立权限」中,同样可以使用 拖拽方式 将权限池中声明的权限,分配给用户。 在这里插入图片描述

六、通配符权限设计 —— 权限不再碎片化

在传统后台管理系统中,权限往往被拆得极碎: • user:add • user:edit • user:delete • user:resetPassword • ……

随着系统复杂度上升,权限字符串数量呈指数级增长, 维护成本极高,配置体验极差。

JunoYi 在权限模型中引入了 通配符权限机制, 让权限既保持精确,又具备极强的表达能力。

单级通配符 *

单级通配符用于匹配当前层级下的所有权限

sys:user:*

等价于

sys:user:view
sys:user:add
sys:user:edit
sys:user:delete

但不会匹配:

sys:user:role:assign

特点:

  • 仅匹配当前层级
  • 不影响更深层级的权限
  • 适合「模块级完整权限」

多级通配符 **

多级通配符用于匹配当前节点下的所有层级权限

sys:user:**

可匹配:

sys:user:view
sys:user:add
sys:user:role:assign
sys:user:password:reset

特点: • 覆盖所有子层级 • 适合超级管理员或系统内置权限组 • 避免权限配置遗漏

通配符带来的实际价值 • 权限声明更少 • 权限组配置更直观 • 权限组合能力更强 • 权限结构可自然扩展,而无需改动已有配置

新增权限 ≠ 新增配置负担 这点在中大型系统中尤为重要。

七、权限即时生效 —— 动态权限策略引擎

在传统后台系统中,修改权限后需要重新登录几乎是“行业惯例”。

而在 JunoYi 中,这一问题被彻底解决。

JunoYi 并不是简单地“查一次数据库然后缓存权限”,而是引入了一套 动态权限策略引擎(Runtime Permission Engine),用于在运行时统一计算、装配和校验权限上下文。

权限不直接依赖数据库查询

在 JunoYi 中: • 权限字符串只是规则描述 • 权限组是权限的组织单元 • 用户、角色、部门只是权限组的载体

这意味着:

权限的计算过程 ≠ 每次请求都访问数据库

系统启动或权限发生变更时,会将权限数据整理为可快速计算的结构,避免在接口调用阶段进行复杂的 SQL Join 查询。

运行时权限计算,而不是静态授权

JunoYi 的权限校验流程大致如下:

请求进入
   ↓
解析当前用户的权限上下文
   ↓
通过权限策略引擎匹配权限规则(支持 * / ** 通配)
   ↓
快速得出是否允许访问

关键点 • 权限是在运行时动态计算 • 支持权限组继承、叠加、覆盖 • 不依赖固定角色模型(超越传统 RBAC)

Redis 作为权限上下文缓存中心

为了在高并发场景下保证性能,JunoYi 使用 Redis 对权限上下文进行缓存: • 用户 → 权限组集合 • 权限组 → 权限字符串集合 • 预编译后的权限匹配结构

效果: • 避免每次请求查询数据库 • 权限校验可做到接近内存级性能 • 系统整体吞吐能力显著提升

权限变更的实时生效机制

当发生以下行为时: • 修改权限组内容 • 用户 / 角色 / 部门重新绑定权限组 • 权限组继承关系变更

系统会: 1. 更新权限相关数据 2. 刷新 Redis 中对应的权限上下文缓存 3. 通知权限引擎重新加载最新策略

因此: • 已登录用户无需重新登录 • Token 无需重新签发 • 新权限立即参与后续请求校验

前端与后端的协同刷新

•	后端:权限校验实时生效
•	前端:刷新页面即可重新渲染菜单与 UI 权限

这保证了: • 权限一致性 • 用户体验连续性 • 不会因权限调整导致系统“卡死”或“强制下线”

八、总结

JunoYi 后台管理系统框架,并不是在传统后台框架(如 RuoYi)的基础上简单“修修补补”, 而是从权限模型设计这一最核心、最复杂、也最容易失控的部分重新出发, 对整个后台系统的架构方式进行了一次系统性的重构与思考。

在这个框架中: • 权限不再强绑定菜单 • 角色不再是权限的唯一载体 • 权限字符串只是规则描述,而不是结构约束 • 权限组成为真正的权限管理核心 • 通配符权限让权限具备天然的扩展能力 • 权限变更无需重新登录,保存即可生效

这些设计,使得 JunoYi 更适合: • 中大型后台系统 • 多平台、多端统一权限模型 • 长期演进、持续迭代的业务系统 • 对权限精细度和可维护性有更高要求的项目

项目信息

  • 项目名称:JunoYi 后台管理系统框架
  • 项目定位:面向现代企业与技术团队的全新权限驱动型后台管理脚手架
  • 项目介绍:基于 Spring Boot 3 Java 后台管理脚手架框架,内置完善的基础设施能力,面向企业级业务场景设计。支持多端接入,一套代码多端适配;权限与菜单彻底解耦,推翻传统权限设计,采用 RBAC + ABAC + 权限节点 DSL + 运行时策略引擎,更灵活强大;内置安全机制与接口端到端加密,让开发者专注业务而非基础防护。
  • 开源协议:MIT免费开源

项目仓库地址:

Github: github.com/Juno-Yi/Jun… Github配套前端github.com/Juno-Yi/Jun…

Giteegitee.com/juno-yi/Jun… Gitee配套前端gitee.com/juno-yi/jun…

image.png

如果你喜欢这个项目,就顺手给项目作者点个Star吧,免费开源不易,多多支持一下吧!