# vue3-rbac **Repository Path**: code-html/vue3-rbac ## Basic Information - **Project Name**: vue3-rbac - **Description**: 一个基于 Vue 3 + TypeScript + Node.js 的现代化后台管理系统,实现了完整的 RBAC(基于角色的访问控制)权限模型。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-19 - **Last Updated**: 2026-03-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RBAC 后台管理系统 一个基于 Vue 3 + TypeScript + Node.js 的现代化后台管理系统,实现了完整的 RBAC(基于角色的访问控制)权限模型。 ## 项目概述 本项目是一个前后端分离的后台管理系统,采用现代化的技术栈和设计理念,提供了完整的用户管理、角色管理、权限控制等功能。系统实现了双 token 机制,确保用户会话的安全性和持续性。 ## 技术栈 ### 前端 - **Vue 3** - 渐进式 JavaScript 框架 - **TypeScript** - JavaScript 的超集,提供类型安全 - **Vite** - 下一代前端构建工具 - **Vue Router** - Vue.js 官方路由管理器 - **Pinia** - Vue.js 状态管理库 - **Element Plus** - 基于 Vue 3 的组件库 - **Axios** - HTTP 客户端 ### 后端 - **Node.js** - JavaScript 运行时环境 - **Express** - Web 应用框架 - **JWT** - JSON Web Token 认证 - **Bcryptjs** - 密码加密库 - **CORS** - 跨域资源共享 ## 功能特性 ### 核心功能 - ✅ 用户登录/登出 - ✅ 双 Token 机制(Access Token + Refresh Token) - ✅ Token 自动刷新 - ✅ RBAC 权限模型 - ✅ 动态菜单权限 - ✅ 路由守卫 ### 业务功能 - ✅ 仪表盘 - 数据统计展示 - ✅ 用户管理 - 用户的增删改查 - ✅ 角色管理 - 角色的增删改查 - ✅ 个人中心 - 个人信息管理 ### 界面特性 - 🎨 现代化 UI 设计 - 📱 响应式布局 - 🌈 渐变背景和动画效果 - 🎯 统一的设计语言 ## 项目结构 ``` RBAC-WEB/ ├── backend/ # 后端项目 │ ├── routes/ # 路由文件 │ │ ├── auth.js # 认证路由 │ │ └── protected.js # 受保护的路由 │ ├── index.js # 后端入口文件 │ ├── package.json # 后端依赖配置 │ └── .env # 环境变量配置 ├── src/ # 前端源代码 │ ├── api/ # API 接口 │ │ └── request.ts # Axios 封装 │ ├── router/ # 路由配置 │ │ └── index.ts # 路由定义 │ ├── store/ # 状态管理 │ │ └── user.ts # 用户状态 │ ├── views/ # 页面组件 │ │ ├── Login.vue # 登录页面 │ │ ├── Home.vue # 首页框架 │ │ ├── Dashboard.vue # 仪表盘 │ │ ├── User.vue # 用户管理 │ │ ├── Role.vue # 角色管理 │ │ ├── Profile.vue # 个人中心 │ │ └── NotFound.vue # 404 页面 │ ├── App.vue # 根组件 │ ├── main.ts # 前端入口文件 │ └── style.css # 全局样式 ├── package.json # 前端依赖配置 └── README.md # 项目说明文档 ``` ## 快速开始 ### 环境要求 - Node.js >= 16.0.0 - npm >= 8.0.0 ### 安装依赖 ```bash # 安装前端依赖 npm install # 安装后端依赖 cd backend npm install ``` ### 配置环境变量 在 `backend/.env` 文件中配置以下环境变量: ```env JWT_SECRET=your_jwt_secret_key JWT_REFRESH_SECRET=your_jwt_refresh_secret_key PORT=3000 ``` ### 启动项目 ```bash # 启动后端服务(在 backend 目录下) cd backend npm start # 启动前端开发服务器(在项目根目录下) cd .. npm run dev ``` ### 访问系统 - 前端地址:http://localhost:5174 - 后端地址:http://localhost:3000 ## 测试账号 ### 管理员账号 - 用户名:`admin` - 密码:`admin123` - 权限:所有菜单(仪表盘、用户管理、角色管理、个人中心) ### 普通用户账号 - 用户名:`user` - 密码:`user123` - 权限:部分菜单(仪表盘、个人中心) ## 双 Token 机制 系统采用双 Token 机制来保证用户会话的安全性和持续性: ### Access Token - 有效期:10 秒 - 用途:API 请求认证 - 存储:localStorage ### Refresh Token - 有效期:25 秒 - 用途:刷新 Access Token - 存储:localStorage ### 工作流程 1. 用户登录成功后,获得 Access Token 和 Refresh Token 2. 前端使用 Access Token 进行 API 请求 3. 当 Access Token 过期(401 错误),前端自动使用 Refresh Token 获取新的 Access Token 4. 如果 Refresh Token 也过期,用户需要重新登录 ## RBAC 权限模型 系统实现了基于角色的访问控制(RBAC)模型: ### 角色定义 - **admin** - 管理员角色,拥有所有权限 - **user** - 普通用户角色,拥有部分权限 ### 权限控制 1. **菜单权限**:根据用户角色动态显示菜单 2. **路由权限**:通过路由守卫控制页面访问 3. **API 权限**:后端验证用户角色和权限 ### 权限配置 ```javascript // 菜单配置 const menus = { admin: [ { path: '/home/dashboard', title: '仪表盘', icon: 'DataLine' }, { path: '/home/user', title: '用户管理', icon: 'User' }, { path: '/home/role', title: '角色管理', icon: 'Avatar' }, { path: '/home/profile', title: '个人中心', icon: 'UserFilled' } ], user: [ { path: '/home/dashboard', title: '仪表盘', icon: 'DataLine' }, { path: '/home/profile', title: '个人中心', icon: 'UserFilled' } ] } ``` ## API 接口文档 ### 认证接口 #### 登录 - **URL**: `POST /api/login` - **请求体**: ```json { "username": "admin", "password": "admin123" } ``` - **响应**: ```json { "success": true, "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "user": { "id": 1, "username": "admin", "role": "admin" }, "menuList": [...] } ``` #### 刷新 Token - **URL**: `POST /api/refresh-token` - **请求体**: ```json { "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." } ``` - **响应**: ```json { "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." } ``` #### 退出登录 - **URL**: `POST /api/logout` - **响应**: ```json { "message": "退出登录成功" } ``` ### 业务接口 #### 仪表盘数据 - **URL**: `GET /api/dashboard` - **需要认证**: 是 - **响应**: 统计数据和最近活动列表 #### 用户管理 - **URL**: `GET /api/users` - 获取用户列表 - **URL**: `POST /api/users` - 添加用户 - **URL**: `PUT /api/users/:id` - 更新用户 - **URL**: `DELETE /api/users/:id` - 删除用户 - **需要认证**: 是 - **需要角色**: admin #### 角色管理 - **URL**: `GET /api/roles` - 获取角色列表 - **URL**: `POST /api/roles` - 添加角色 - **URL**: `PUT /api/roles/:id` - 更新角色 - **URL**: `DELETE /api/roles/:id` - 删除角色 - **需要认证**: 是 - **需要角色**: admin #### 个人中心 - **URL**: `GET /api/profile` - 获取个人信息 - **URL**: `PUT /api/profile` - 更新个人信息 - **需要认证**: 是 ## 开发指南 ### 前端开发 ```bash # 启动开发服务器 npm run dev # 构建生产版本 npm run build # 预览生产版本 npm run preview ``` ### 后端开发 ```bash # 启动后端服务 cd backend npm start ``` ### 代码规范 - 使用 TypeScript 进行类型检查 - 遵循 Vue 3 组合式 API 风格 - 使用 ESLint 进行代码检查 ## 浏览器支持 - Chrome >= 87 - Firefox >= 78 - Safari >= 14 - Edge >= 88 ## 许可证 MIT License ## 联系方式 如有问题或建议,请提交 Issue 或 Pull Request。 --- **注意**:本项目仅供学习和演示使用,不建议直接用于生产环境。在生产环境中使用时,请确保: 1. 修改默认的 JWT 密钥 2. 使用 HTTPS 协议 3. 添加更完善的错误处理和日志记录 4. 使用数据库存储用户数据 5. 实现