AKA Platform是一个企业级短链接管理平台,提供安全、可靠的短链接生成、管理、审批和统计功能。系统支持Azure AD认证,实现了完善的权限控制和审批流程,帮助企业有效管理内部短链接资源。
打开应用后,点击 Sign in with Azure AD 按钮,通过 Azure AD 账号完成身份验证。登录成功后将自动跳转到主页面。
查看列表
左侧导航点击 My Redirects,可以看到你作为所有者的所有短链接,表格展示以下信息:
- Name:短链接名称,点击可跳转到详情页
- Short URL:生成的短链接地址,点击可直接访问
- Target URL:目标长链接
- Status:审批状态(Pending / Approved / Rejected)
- Owners:该短链接的所有者,鼠标悬停可查看邮箱
- Created At:创建时间,可点击表头排序
搜索与筛选
每一列支持独立搜索:点击列头的 🔍 图标,在输入框中输入关键词后按 Enter 或点击 Search 确认。Status 列支持多选筛选。有筛选条件激活时,表格右上方出现 Reset All Filters 按钮,点击可一键清除所有过滤条件。
分页
表格右下角可调整每页显示数量(10 / 20 / 50 / 100)并支持页码跳转,设置在翻页后保持生效。
创建短链接
点击右上角 Create Redirect 按钮,填写以下信息:
- Name:短链接的显示名称
- Short Name:短链接的自定义路径(全局唯一,只允许小写字母、数字和连字符)
- Target URL:目标地址(支持
https://、http://及自定义 scheme,如weixin://) - Owners:至少添加一名所有者(包括你自己)
- Description(可选):描述信息
提交后短链接进入 Pending 状态,等待管理员审批。审批结果会通过铃铛通知推送给所有 owners。
编辑短链接
在列表中点击对应行的 Edit 按钮,修改后重新提交,短链接将重置为 Pending 状态并再次进入审批流程,同时通知所有管理员。
删除短链接
点击 Delete 按钮,在确认弹窗中点击 Delete 永久删除,此操作不可恢复。
查看详情
点击 View 按钮或短链接名称,可查看详细信息,包括审批记录和点击统计。
左侧导航点击 Dashboard,可查看你的短链接整体统计数据:
- 点击量趋势图
- 各短链接访问排行
- 设备类型分布等统计信息
页面右上角导航栏右侧有一个铃铛图标 🔔。
- 红色数字徽标:表示当前未读通知数量
- 点击铃铛:展开通知列表,显示所有未读通知
- 点击某条通知:标记为已读,并跳转到对应页面(审批类通知跳转到审批页,结果类通知跳转到 redirect 详情页)
- Mark all read:一键将所有通知标记为已读并清空列表
- 自动刷新:每 30 秒自动拉取一次最新通知,有新消息时徽标数量自动更新
通知类型说明:
| 通知类型 | 触发时机 | 接收人 |
|---|---|---|
| Pending Review | 创建或更新 redirect 后 | 所有管理员 |
| Approved | 管理员审批通过后 | 该 redirect 的所有 owners |
| Rejected | 管理员审批拒绝后 | 该 redirect 的所有 owners |
以下功能仅限 Admin 角色用户可见。
Redirect Approval(审批页)
左侧导航点击 Admin → Redirect Approval,可查看所有用户提交的短链接并进行审批。
- 顶部 Status 筛选器:快速过滤 Pending / Approved / Rejected 状态(server-side 查询)
- 顶部 搜索框:全局关键词搜索(server-side 查询,支持名称、描述、短链接、目标URL)
- 列头搜索(🔍):对 Name、Short URL、Target URL、Owners 进行 client-side 二次过滤,与server-side 搜索互补
- Reset All Filters:清除所有列级过滤条件
对每条 Pending 状态的 redirect:
- 点击 Approve:通过审批,该 redirect 的所有 owners 将收到"已批准"通知
- 点击 Reject:拒绝申请,该 redirect 的所有 owners 将收到"已拒绝"通知
Admin Dashboard
左侧导航点击 Admin → Admin Dashboard,可查看全平台的统计数据,包括:
- 总短链接数及趋势
- 全平台点击量排行
- 用户活跃度统计
- 数据导出(CSV)
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 前端应用 │────▶│ 后端服务 │────▶│ 数据库服务 │
│ (React + Antd) │ │ (Node.js + Express) │ │ (MongoDB) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ ▲
▼ │
┌─────────────────┐ ┌─────────────────┐
│ Azure AD 认证 │◀────│ 外部API │
└─────────────────┘ └─────────────────┘
| 分类 | 技术框架/工具 | 版本要求 |
|---|---|---|
| 前端框架 | React | 18.x |
| 构建工具 | Vite | 5.x |
| UI组件库 | Ant Design | 5.x |
| 后端框架 | Node.js + Express | 18.x |
| 数据库 | MongoDB | 5.0+ |
| 认证服务 | Azure AD (OAuth 2.0) | - |
| 容器化部署 | Docker + Docker Compose | 20.x+ |
| 认证库 | @azure/msal-browser | 3.x |
| @azure/msal-react | 2.x | |
| HTTP客户端 | Axios | 1.x |
- ✅ Azure AD单点登录
- ✅ 基于角色的访问控制(RBAC)
- ✅ 用户信息自动同步
- ✅ 会话状态持久化管理
- ✅ 短链接生成
- ✅ 自定义短链接
- ✅ 项目信息完整管理
- ✅ 状态跟踪(待审批、已批准、已拒绝)
- ✅ 目标URL验证
- ✅ 项目所有者验证
- ✅ 管理员审批机制
- ✅ 审批历史记录
- ⏳ 审批通知(待实现)
- ✅ 点击量统计
- ✅ 访问趋势分析
- ✅ 设备类型分布
- ⏳ 地理位置统计(待实现)
- ✅ 管理员全局统计视图
- ⏳ 用户管理(待实现)
- ✅ 系统监控
- ✅ 访问日志记录
- ⏳ 日志管理界面(待实现)
- Node.js 18.x+
- MongoDB 5.0+
- npm 或 yarn
# 进入后端目录
cd backend
# 安装依赖
npm install
# 复制环境变量示例文件并修改
cp .env.example .env
# 启动开发服务器
npm run dev# 进入前端目录
cd frontend
# 安装依赖
npm install
# 复制环境变量示例文件并修改(开发环境)
cp .env.development .env
# 启动开发服务器
npm run dev- Docker 20.x+
- Docker Compose 1.29+
# 在项目根目录下执行
docker-compose up -d# 服务器配置
PORT=3000
NODE_ENV=development
# MongoDB 连接配置
MONGODB_URI=mongodb://localhost:27017/aka-platform
# Azure AD 配置
AZURE_AD_CLIENT_ID=your-azure-ad-client-id
AZURE_AD_TENANT_ID=your-azure-ad-tenant-id
AZURE_AD_CLIENT_SECRET=your-azure-ad-client-secret
AZURE_AD_REDIRECT_URI=http://localhost:3000/auth/callback
AZURE_AD_GRAPH_API_URL=https://graph.microsoft.com/v1.0
# JWT 配置
JWT_SECRET=your-jwt-secret
JWT_EXPIRY=24h
# 基础URL配置
BASE_URL=http://localhost:3000
CORS_ORIGIN=http://localhost:5173,http://localhost
# 管理员邮箱(多个用逗号分隔)
ADMIN_EMAILS=admin@example.com,admin2@example.com
# 所有者搜索功能开关
ENABLE_OWNER_SEARCH=false
# API 配置
VITE_API_URL=http://localhost:3000
# Azure AD 配置
VITE_AZURE_AD_CLIENT_ID=your-spa-client-id
VITE_AZURE_AD_TENANT_ID=your-tenant-id
VITE_AZURE_AD_API_CLIENT_ID=your-api-client-id
VITE_REDIRECT_URI=http://localhost:5173
# 短链接域名
VITE_SHORT_URL_DOMAIN=https://your-domain.com
# 所有者搜索功能开关
VITE_ENABLE_OWNER_SEARCH=false
# API 配置
VITE_API_URL=https://your-api-domain.com
# Azure AD 配置
VITE_AZURE_AD_CLIENT_ID=your-spa-client-id
VITE_AZURE_AD_TENANT_ID=your-tenant-id
VITE_AZURE_AD_API_CLIENT_ID=your-api-client-id
VITE_REDIRECT_URI=https://your-frontend-domain.com
# 短链接域名
VITE_SHORT_URL_DOMAIN=https://your-short-domain.com
# 所有者搜索功能开关
VITE_ENABLE_OWNER_SEARCH=true
# Azure AD 租户ID
AZURE_AD_TENANT_ID=your-tenant-id
# SPA 应用配置
SPA_AZURE_AD_CLIENT_ID=your-spa-client-id
SPA_REDIRECT_URI=http://localhost:5173
# API 应用配置
API_AZURE_AD_CLIENT_ID=your-api-client-id
# JWT 配置
JWT_SECRET=your-jwt-secret
JWT_EXPIRY=24h
# 基础URL
BASE_URL=http://localhost:3000
# CORS 配置
CORS_ORIGIN=http://localhost:5173,http://localhost
# 管理员邮箱
ADMIN_EMAILS=admin@example.com
# 所有者搜索开关
ENABLE_OWNER_SEARCH=false
| 接口路径 | 方法 | 功能描述 | 权限要求 |
|---|---|---|---|
| /auth/me | GET | 获取当前用户信息 | 已认证 |
| /auth/refresh-token | POST | 刷新访问令牌 | 已认证 |
| 接口路径 | 方法 | 功能描述 | 权限要求 |
|---|---|---|---|
| /projects | POST | 创建新短链接项目 | 已认证 |
| /projects | GET | 获取用户项目列表 | 已认证 |
| /projects/:id | GET | 获取项目详情 | 已认证/管理员 |
| /projects/:id | PUT | 更新项目信息 | 项目所有者/管理员 |
| /projects/:id | DELETE | 删除项目 | 项目所有者/管理员 |
| 接口路径 | 方法 | 功能描述 | 权限要求 |
|---|---|---|---|
| /admin/projects | GET | 获取所有项目列表 | 管理员 |
| /admin/projects/:id/approve | PUT | 批准项目 | 管理员 |
| /admin/projects/:id/reject | PUT | 拒绝项目 | 管理员 |
| /admin/stats | GET | 获取系统统计数据 | 管理员 |
| 接口路径 | 方法 | 功能描述 | 权限要求 |
|---|---|---|---|
| /users/search | GET | 搜索用户 | 已认证 |
| 接口路径 | 方法 | 功能描述 | 权限要求 |
|---|---|---|---|
| /stats/clicks/:shortUrl | GET | 获取短链接点击统计 | 项目所有者/管理员 |
| /stats/user | GET | 获取用户统计数据 | 已认证 |
| /stats/project/:id | GET | 获取项目统计数据 | 项目所有者/管理员 |
| 接口路径 | 方法 | 功能描述 | 权限要求 |
|---|---|---|---|
| /:shortUrl | GET | 短链接重定向 | 公开 |
| /api/short-urls/:shortUrl | GET | 获取短链接信息 | 已认证/管理员 |
backend/
├── src/
│ ├── config/ # 配置文件
│ │ ├── azureAd.js # Azure AD配置
│ │ └── database.js # 数据库配置
│ ├── controllers/ # 控制器
│ │ ├── authController.js
│ │ ├── projectController.js
│ │ ├── adminController.js
│ │ └── statsController.js
│ ├── middleware/ # 中间件
│ │ ├── authMiddleware.js
│ │ └── errorMiddleware.js
│ ├── models/ # 数据模型
│ │ ├── User.js
│ │ ├── Project.js
│ │ └── Click.js
│ ├── routes/ # 路由
│ │ ├── authRoutes.js
│ │ ├── projectRoutes.js
│ │ ├── adminRoutes.js
│ │ └── statsRoutes.js
│ ├── scripts/ # 脚本文件
│ ├── services/ # 业务逻辑
│ │ ├── authService.js
│ │ ├── projectService.js
│ │ └── statsService.js
│ └── index.js # 应用入口
├── .env.example # 环境变量示例
├── package.json # 依赖配置
└── Dockerfile
frontend/
├── src/
│ ├── components/ # 通用组件
│ │ ├── Layout.jsx # 布局组件
│ ├── pages/ # 页面组件
│ │ ├── AdminDashboard.jsx # 管理员仪表盘
│ │ ├── AppInitializer.jsx # 应用初始化组件
│ │ ├── Dashboard.jsx # 用户仪表盘
│ │ ├── LoginPage.jsx # 登录页面
│ │ ├── ProjectApproval.jsx # 项目审批页面
│ │ ├── ProjectDetail.jsx # 项目详情页面
│ │ ├── ProjectForm.jsx # 项目表单页面
│ │ └── ProjectList.jsx # 项目列表页面
│ ├── services/ # API服务
│ │ └── api.js # API请求配置
│ ├── utils/ # 工具函数
│ ├── App.jsx # 应用组件
│ ├── main.jsx # 应用入口
│ └── theme.js # 主题配置
├── public/ # 静态资源
├── .env.example # 环境变量示例
├── package.json # 依赖配置
├── vite.config.js # Vite配置
└── Dockerfile
- 前端:使用ESLint和Prettier进行代码检查和格式化
- 后端:使用ESLint进行代码检查
遵循Conventional Commits规范:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
常用type:
- feat: 添加新功能
- fix: 修复bug
- docs: 文档更新
- style: 代码格式修改
- refactor: 代码重构
- test: 测试用例更新
- chore: 构建过程或辅助工具的变动
MIT License