chore: connect GitLink repository history
English
一个面向 Next.js 学习者和后台原型开发者的前端 RBAC 参考实现:用合成数据演示“用户 → 角色 → 模块权限 → 动态菜单与路由守卫”的完整交互链路。
[!IMPORTANT] 这是参考 Demo,不是生产鉴权系统。登录、角色判断和业务数据全部运行在浏览器端;项目不包含服务端身份认证、数据库、加密会话、审计日志或真正的安全隔离。任何人都能在浏览器开发者工具中修改客户端状态,请勿直接用于真实业务。
很多 RBAC 教程只展示一张权限表,或者只隐藏几个按钮。本项目把权限模型放进一个可操作的管理后台中,让你可以切换三种演示角色,观察同一份模块授权数据如何同时影响:
它适合作为课程设计参考、前端权限建模实验或接入真实后端前的交互原型。
如果要用于真实系统,应由服务端在每次数据访问时重新验证会话与权限,前端守卫只能改善用户体验,不能代替安全控制。
22.0.0
git clone <your-repository-url> cd next-rbac-admin-demo npm ci npm run dev
打开 http://127.0.0.1:3000。Windows 用户也可以双击相对路径运行的 start-dev.bat,但跨平台文档始终以 npm 命令为准。
start-dev.bat
所有账号只存在于 src/lib/mock-data.ts,统一演示密码为 123456。
src/lib/mock-data.ts
123456
admin
manager
staff
建议先用 staff 登录并直接访问 /admin/system/users,确认出现“无权访问”;再切换 admin 验证用户管理页面可见。
/admin/system/users
flowchart LR U["合成用户"] --> R["角色"] R --> P["角色授权表"] P --> M["模块集合"] M --> N["动态菜单"] M --> G["客户端路由守卫"]
权限判断的纯逻辑位于 src/lib/rbac.ts。浏览器只在 localStorage 中保存合成用户 ID,恢复时会从内存数据重新读取角色,不保存密码或信任持久化的角色字段。业务数据变更只保存在 React 内存中,刷新页面即重置。
src/lib/rbac.ts
localStorage
src/ ├─ app/ # Next.js App Router 页面 │ ├─ login/ # 演示角色选择与登录 │ └─ admin/ # 受客户端守卫保护的后台模块 ├─ components/admin/ # PermissionGuard ├─ components/ui/ # 通用展示组件 └─ lib/ ├─ mock-data.ts # 明确标注的合成数据 ├─ demo-auth.ts # 演示登录与本地状态恢复 ├─ rbac.ts # 权限查询和菜单树纯函数 ├─ auth-context.tsx # 浏览器端演示会话 └─ data-store.tsx # 内存业务数据 tests/e2e/ # Playwright 角色与路由冒烟测试 docs/ # 架构、演示数据与发布审计
更详细的设计见 docs/architecture.md。
docs/architecture.md
npm run format:check # 格式 npm run lint # ESLint npm run typecheck # TypeScript npm test # Node.js 单元与 AuthProvider 行为测试 npm run test:coverage # 核心逻辑覆盖率 npm run build # 生产构建 npx playwright install chromium npm run test:e2e # 浏览器端冒烟测试 npm run capture:screenshots # 重新生成 README 的真实界面截图
npm run check 会依次执行格式、Lint、类型、单元测试和构建。CI 还会在独立任务中运行 Chromium E2E;测试不访问外部 API,也不需要秘密配置。
npm run check
当前版本没有必需环境变量,也不需要 API Key。仓库会忽略所有 .env*(仅允许未来的 .env.example)。如你扩展真实后端:
.env*
.env.example
SECURITY.md
合成数据的来源与使用范围见 docs/demo-data.md。
docs/demo-data.md
Roadmap 不代表发布时间承诺。欢迎先通过 Issue 讨论设计,再提交小而可验证的修改。
请阅读 CONTRIBUTING.md 和 CODE_OF_CONDUCT.md。Bug、文档改进和适合初学者的测试补充都受欢迎。安全问题请不要公开提交 Issue。
CONTRIBUTING.md
CODE_OF_CONDUCT.md
本项目由课程型 RBAC 作业整理而来,公开版本重新定义为教学和原型参考实现。课程报告、旧固定盘符脚本和来源待确认的二进制材料不属于公开仓库内容。
代码计划按 MIT License 发布;仓库所有者仍须在首次公开前完成 docs/release-audit.md 中的源码与素材权利确认。
docs/release-audit.md
基于 Next.js、TypeScript 与合成数据的前端 RBAC 参考实现,演示角色权限、动态菜单、路由守卫和后台业务模块联动。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
next-rbac-admin-demo
English
一个面向 Next.js 学习者和后台原型开发者的前端 RBAC 参考实现:用合成数据演示“用户 → 角色 → 模块权限 → 动态菜单与路由守卫”的完整交互链路。
为什么有这个项目
很多 RBAC 教程只展示一张权限表,或者只隐藏几个按钮。本项目把权限模型放进一个可操作的管理后台中,让你可以切换三种演示角色,观察同一份模块授权数据如何同时影响:
它适合作为课程设计参考、前端权限建模实验或接入真实后端前的交互原型。
能力与边界
已实现
明确不包含
如果要用于真实系统,应由服务端在每次数据访问时重新验证会话与权限,前端守卫只能改善用户体验,不能代替安全控制。
快速开始
环境要求
22.0.0);安装和启动
打开 http://127.0.0.1:3000。Windows 用户也可以双击相对路径运行的
start-dev.bat,但跨平台文档始终以 npm 命令为准。演示账号
所有账号只存在于
src/lib/mock-data.ts,统一演示密码为123456。adminmanagerstaff建议先用
staff登录并直接访问/admin/system/users,确认出现“无权访问”;再切换admin验证用户管理页面可见。权限模型
权限判断的纯逻辑位于
src/lib/rbac.ts。浏览器只在localStorage中保存合成用户 ID,恢复时会从内存数据重新读取角色,不保存密码或信任持久化的角色字段。业务数据变更只保存在 React 内存中,刷新页面即重置。项目结构
更详细的设计见
docs/architecture.md。质量检查
npm run check会依次执行格式、Lint、类型、单元测试和构建。CI 还会在独立任务中运行 Chromium E2E;测试不访问外部 API,也不需要秘密配置。配置和安全
当前版本没有必需环境变量,也不需要 API Key。仓库会忽略所有
.env*(仅允许未来的.env.example)。如你扩展真实后端:localStorage角色视为授权依据;SECURITY.md私下报告安全问题。合成数据的来源与使用范围见
docs/demo-data.md。Roadmap
Roadmap 不代表发布时间承诺。欢迎先通过 Issue 讨论设计,再提交小而可验证的修改。
参与贡献
请阅读
CONTRIBUTING.md和CODE_OF_CONDUCT.md。Bug、文档改进和适合初学者的测试补充都受欢迎。安全问题请不要公开提交 Issue。项目来源与许可证
本项目由课程型 RBAC 作业整理而来,公开版本重新定义为教学和原型参考实现。课程报告、旧固定盘符脚本和来源待确认的二进制材料不属于公开仓库内容。
代码计划按 MIT License 发布;仓库所有者仍须在首次公开前完成
docs/release-audit.md中的源码与素材权利确认。