博客系统需求规格说明书
| 文档版本 |
修订日期 |
修订人 |
修订内容 |
| V1.0 |
2026-05-17 |
— |
初始版本,完成全量需求定义 |
1. 项目概述
1.1 项目背景
本博客系统旨在为内容创作者与读者提供一个稳定、安全、可扩展的写作与阅读平台。系统支持管理员对平台进行统一管控,注册用户可发布博客、互动评论,访客可浏览公开内容。
1.2 项目目标
- 构建博客内容管理系统,支持完整的博客发布与管理流程
- 提供多级评论体系,促进读者与作者互动
- 保障平台数据安全与访问控制
- 支持主流浏览器与移动端适配
1.3 适用范围
本文档适用于产品经理、前端开发工程师、后端开发工程师、测试工程师及相关项目干系人,作为系统设计、开发实现与验收测试的统一依据。
2.功能需求清单
2.1 管理员登录
2.1.1 功能描述
提供超级管理员(内置唯一账号)登录后台管理系统的身份认证功能。
2.1.2 业务规则
| 编号 |
规则项 |
业务规则说明 |
| FR-ADM-LOGIN-01 |
登录方式 |
支持「手机号+密码」或「用户名+密码」两种方式登录 |
| FR-ADM-LOGIN-02 |
账号唯一性 |
系统初始化时内置 1 个 超级管理员账号,不可新增、不可删除 |
| FR-ADM-LOGIN-03 |
验证码机制 |
连续 3 次密码输入错误后,需输入图形验证码;连续 5 次错误后,账号锁定 30 分钟 |
| FR-ADM-LOGIN-04 |
防暴力破解 |
同一 IP 在 5 分钟内登录失败超过 10 次,该 IP 将被临时封禁 15 分钟 |
| FR-ADM-LOGIN-05 |
登录日志 |
每次登录成功/失败均需记录日志,包含:时间、IP 地址、设备指纹、登录结果 |
| FR-ADM-LOGIN-06 |
会话管理 |
登录会话有效期为 8 小时,超时需重新认证;支持「记住我」功能(有效期 7 天) |
2.1.3 验收标准
| 编号 |
验证场景 |
预期结果 |
| AC-ADM-LOGIN-01 |
使用正确的用户名/手机号和密码登录 |
登录成功,跳转至后台仪表盘 |
| AC-ADM-LOGIN-02 |
使用错误的密码连续登录 3 次 |
第 4 次登录时出现图形验证码输入框 |
| AC-ADM-LOGIN-03 |
使用错误的密码连续登录 5 次 |
账号被锁定,提示「账号已被锁定,请 30 分钟后再试」 |
| AC-ADM-LOGIN-04 |
尝试创建第二个管理员账号 |
系统禁止操作,返回错误提示 |
| AC-ADM-LOGIN-05 |
查询登录日志 |
日志完整记录每次登录的时间、IP、设备指纹、结果 |
2.2 用户注册
2.2.1 功能描述
普通用户通过提供邮箱和密码即可自助注册成为系统注册用户。
2.2.2 业务规则
| 编号 |
规则项 |
业务规则说明 |
| FR-USER-REG-01 |
注册信息 |
用户需提供 邮箱 和 密码 两项必填信息完成注册 |
| FR-USER-REG-02 |
密码强度 |
密码长度 8~32 位,必须包含大写字母、小写字母、数字和特殊字符中的至少三类 |
| FR-USER-REG-03 |
邮箱唯一性 |
同一邮箱仅允许注册一个账号,注册时需发送验证邮件进行邮箱真实性校验 |
| FR-USER-REG-04 |
邮箱验证有效期 |
邮箱验证链接有效期为 24 小时,超时需重新发送 |
| FR-USER-REG-05 |
注册频率限制 |
同一 IP 每小时内最多发起 3 次注册请求 |
| FR-USER-REG-06 |
密码重置 |
暂不支持用户自助找回密码,仅管理员可在后台对用户密码进行重置操作 |
2.2.3 验收标准
| 编号 |
验证场景 |
预期结果 |
| AC-USER-REG-01 |
使用合法邮箱和合规密码注册 |
注册成功,系统发送邮箱验证邮件 |
| AC-USER-REG-02 |
使用已被注册的邮箱再次注册 |
提示「该邮箱已被注册」 |
| AC-USER-REG-03 |
输入不合规密码(如纯数字,少于 8 位) |
前端提示密码强度要求,阻止提交 |
| AC-USER-REG-04 |
同一 IP 在 1 小时内发起超过 3 次注册 |
第 4 次注册被限制,提示「注册过于频繁」 |
| AC-USER-REG-05 |
管理员在后台重置用户密码 |
用户收到新密码(或重置通知),可使用新密码登录 |
2.3 用户登录
2.3.1 功能描述
为已注册用户提供账号登录及会话管理功能,支持多端登录限制与第三方登录扩展。
2.3.2 业务规则
| 编号 |
规则项 |
业务规则说明 |
| FR-USER-LOGIN-01 |
登录方式 |
支持「邮箱+密码」方式登录 |
| FR-USER-LOGIN-02 |
多端登录限制 |
同一账号最多允许 3 个活跃会话(不同设备/浏览器),超过时最早会话被强制下线 |
| FR-USER-LOGIN-03 |
第三方登录扩展 |
系统需预留微信登录与 GitHub 登录的 接口扩展点(OAuth 2.0 协议),当前版本不实现但可配置开关 |
| FR-USER-LOGIN-04 |
密码错误策略 |
连续 5 次密码错误后,账号临时锁定 15 分钟 |
| FR-USER-LOGIN-05 |
忘记密码 |
点击「忘记密码」后,引导用户联系管理员重置(当前版本无自助找回功能) |
| FR-USER-LOGIN-06 |
登录状态保持 |
默认会话有效期 24 小时,勾选「记住我」后续有效期延长至 14 天 |
2.3.3 验收标准
| 编号 |
验证场景 |
预期结果 |
| AC-USER-LOGIN-01 |
使用正确邮箱和密码登录 |
登录成功,跳转至首页/个人中心 |
| AC-USER-LOGIN-02 |
同一账号在第 4 台设备上登录 |
最早登录的设备被强制下线,当前设备登录成功 |
| AC-USER-LOGIN-03 |
连续 5 次输入错误密码 |
账号被临时锁定 15 分钟 |
| AC-USER-LOGIN-04 |
点击「忘记密码」 |
页面提示「请联系管理员重置密码」,并提供管理员联系信息 |
| AC-USER-LOGIN-05 |
验证第三方登录接口预留 |
代码中存在可配置的 OAuth 2.0 扩展接口,配置文件可开关 |
| AC-USER-LOGIN-06 |
勾选「记住我」后关闭浏览器再打开 |
会话保持,无需重新登录 |
2.4 博客发布
2.4.1 功能描述
仅已登录用户可创建和发布博客文章,支持富文本编辑、草稿保存、发布状态管理及标签分类绑定。
2.4.2 业务规则
| 编号 |
规则项 |
业务规则说明 |
| FR-BLOG-PUB-01 |
登录校验 |
仅已登录用户 可进入博客编辑页面;未登录用户操作时跳转至登录页 |
| FR-BLOG-PUB-02 |
富文本编辑器 |
编辑器支持:文字排版、图片上传/嵌入(支持 JPEG/PNG/GIF/WebP,单图 ≤10MB)、视频嵌入(支持 URL 识别与 iframe 嵌入) |
| FR-BLOG-PUB-03 |
草稿保存 |
编辑器支持手动保存草稿,草稿仅作者可见;系统每隔 30 秒自动保存当前编辑内容至草稿 |
| FR-BLOG-PUB-04 |
发布状态 |
发布时可选择文章可见性:公开、私密(仅作者可见)、仅粉丝可见 |
| FR-BLOG-PUB-05 |
状态修改 |
已发布的文章可修改可见性状态,修改后立即生效 |
| FR-BLOG-PUB-06 |
标签与分类 |
一篇文章必须绑定 1 个分类,最多绑定 5 个标签;分类与标签由管理员在后台预定义 |
| FR-BLOG-PUB-07 |
内容安全 |
发布内容需经过 XSS 过滤;图片需进行安全检测,禁止上传可执行文件 |
2.4.3 验收标准
| 编号 |
验证场景 |
预期结果 |
| AC-BLOG-PUB-01 |
未登录用户访问编辑页 |
自动跳转至登录页面,登录后返回编辑页 |
| AC-BLOG-PUB-02 |
在编辑器中插入图片 |
图片成功上传并显示在编辑器中,不超过大小限制 |
| AC-BLOG-PUB-03 |
保存草稿后关闭页面再编辑 |
草稿内容完整保留,继续编辑 |
| AC-BLOG-PUB-04 |
发布文章设置为「私密」 |
发布后仅作者在登录状态下可见,其他用户无法访问 |
| AC-BLOG-PUB-05 |
将已发布文章状态从「公开」改为「私密」 |
修改后立即生效,访客无法再看到该文章 |
| AC-BLOG-PUB-06 |
发布时绑定 6 个标签 |
系统提示最多绑定 5 个标签,禁止提交 |
| AC-BLOG-PUB-07 |
在上传区域上传 .exe 文件 |
系统拒绝上传,提示仅支持图片格式 |
2.5 博客列表查看
2.5.1 功能描述
所有用户可浏览博客列表,支持多维度排序筛选、全文检索、分页加载及浏览量统计。
2.5.2 业务规则
| 编号 |
规则项 |
业务规则说明 |
| FR-BLOG-LIST-01 |
排序方式 |
支持按 发布时间(降序/升序)、浏览量(降序)排序 |
| FR-BLOG-LIST-02 |
分类/标签筛选 |
支持按分类筛选与按标签筛选,筛选条件可组合使用 |
| FR-BLOG-LIST-03 |
关键词全文检索 |
支持对文章 标题 和 正文 进行关键词全文检索,检索结果高亮显示关键词 |
| FR-BLOG-LIST-04 |
分页加载 |
每页固定显示 15 篇文章,支持页码跳转与上下翻页 |
| FR-BLOG-LIST-05 |
私密博客可见性 |
私密博客 仅对文章作者可见;其他用户(包括管理员)在列表中不可见该文章 |
| FR-BLOG-LIST-06 |
仅粉丝可见 |
「仅粉丝可见」的文章仅对作者及关注该作者的用户可见 |
| FR-BLOG-LIST-07 |
浏览量统计 |
每次用户(同一用户去重,不包含作者本人)访问文章详情页,浏览量 +1;访客访问也计入 |
| FR-BLOG-LIST-08 |
浏览量数据展示 |
列表中每篇文章卡片需显示 阅读量 数据 |
2.5.3 验收标准
| 编号 |
验证场景 |
预期结果 |
| AC-BLOG-LIST-01 |
按「浏览量降序」排序 |
列表按浏览量从高到低排列,数据准确 |
| AC-BLOG-LIST-02 |
选择分类 A + 标签 B 组合筛选 |
列表仅显示同时满足分类 A 和标签 B 的文章 |
| AC-BLOG-LIST-03 |
搜索关键词「设计模式」 |
标题或正文包含「设计模式」的文章全部展示,关键词高亮 |
| AC-BLOG-LIST-04 |
访问第 2 页 |
第 3 页返回 15 篇文章(或无更多文章时提示「已加载全部」) |
| AC-BLOG-LIST-05 |
作者访问自己的私密文章 |
作者可在列表中看到该文章;其他用户无法看到 |
| AC-BLOG-LIST-06 |
作者本人访问自己的文章详情页 |
浏览量不增加 |
| AC-BLOG-LIST-07 |
列表中确认每篇文章的浏览量显示 |
每篇文章卡片均正确显示阅读量数字 |
2.6 评论功能
2.6.1 功能描述
为用户提供对博客文章进行评论互动的功能,支持多级回复、审核机制与违规内容管控。
2.6.2 业务规则
| 编号 |
规则项 |
业务规则说明 |
| FR-COMMENT-01 |
评论权限 |
已登录用户 方可发表评论;访客可查看但不可发表评论 |
| FR-COMMENT-02 |
多级回复 |
支持楼中楼回复,最多嵌套 3 级(如:A → B → C,C 不可再回复);超过 3 级时自动将回复转为第 3 级的平级评论 |
| FR-COMMENT-03 |
评论审核 |
管理员可在后台开启/关闭「评论审核」开关;开启后用户发表的评论需管理员审核通过方可展示 |
| FR-COMMENT-04 |
评论者身份标识 |
评论者昵称旁显示身份标识:作者(该文章作者)、普通用户 |
| FR-COMMENT-05 |
违规评论处理 |
管理员可对违规评论进行 删除(物理删除)或 屏蔽(逻辑隐藏,仅发表者可见) |
| FR-COMMENT-06 |
回复通知 |
当用户的评论被回复时,系统需发送站内通知;楼中楼回复需通知被回复人 |
| FR-COMMENT-07 |
内容安全 |
评论内容需过滤 XSS 脚本与敏感词,敏感词库由管理员维护 |
2.6.3 验收标准
| 编号 |
验证场景 |
预期结果 |
| AC-COMMENT-01 |
未登录用户点击「发表评论」 |
弹出登录提示或跳转至登录页 |
| AC-COMMENT-02 |
评论 A → B → C → D 四层嵌套回复 |
D 的回复自动变为 C 的平级评论,不产生第 4 级 |
| AC-COMMENT-03 |
管理员开启评论审核 |
用户新提交的评论状态为「待审核」,前台不可见;管理员审核通过后显示 |
| AC-COMMENT-04 |
文章作者在评论区发言 |
评论旁显示「作者」标识 |
| AC-COMMENT-05 |
管理员对评论执行「屏蔽」 |
该评论对其他用户不可见,仅发表者登录后可见 |
| AC-COMMENT-06 |
用户 A 回复用户 B 的评论 |
用户 B 收到站内通知 |
| AC-COMMENT-07 |
评论中包含 <script> 标签 |
脚本被过滤,评论正常显示文本内容 |
3.非功能性需求
3.1 3.1.1 前端页面加载
| 指标 |
要求 |
| 首屏加载时间 |
≤ 2 秒(标准 4G 网络环境,不含图片等大资源) |
| 页面交互响应 |
用户操作反馈时间 ≤ 500ms |
3.1.2 接口响应
| 指标 |
要求 |
| 列表查询接口 |
95% 的请求响应时间 ≤ 500ms |
| 文章详情接口 |
95% 的请求响应时间 ≤ 300ms |
| 登录/注册接口 |
95% 的请求响应时间 ≤ 800ms |
3.1.3 并发能力
| 指标 |
要求 |
| 系统并发用户数 |
支持 ≥ 500 用户同时在线访问 |
| 接口吞吐量 |
核心接口(列表、详情)TPS ≥ 100/s |
3.2 安全性
3.2.1 密码安全
| 要求项 |
说明 |
| 密码存储 |
使用 bcrypt(或同等强度算法)对密码进行加盐哈希存储,禁止明文存储 |
| 密码传输 |
登录/注册等涉及密码的请求必须使用 HTTPS 加密传输 |
3.2.2 接口安全
| 要求项 |
说明 |
| SQL 注入防护 |
所有数据访问层必须使用参数化查询或 ORM 框架,禁止拼接 SQL 语句 |
| XSS 防护 |
用户输入(博客内容、评论、昵称等)在展示前必须进行 HTML 转义 |
| CSRF 防护 |
所有涉及状态变更的接口需校验 CSRF Token |
| 接口限流 |
敏感接口(登录、注册、评论提交)需进行频率限制 |
3.2.3 数据传输
| 要求项 |
说明 |
| 全站 HTTPS |
生产环境强制 HTTPS,HTTP 请求自动 301 重定向至 HTTPS |
| 敏感信息脱敏 |
日志中不得输出用户密码、Token 等敏感信息 |
3.3 兼容性
3.3.1 浏览器兼容
| 浏览器 |
支持版本 |
| Google Chrome |
最近 3 个主版本(当前 ≥ v120) |
| Microsoft Edge |
最近 3 个主版本(基于 Chromium) |
| Apple Safari |
最近 3 个主版本(当前 ≥ v17) |
3.3.2 移动端适配
| 设备 |
要求 |
| 分辨率覆盖 |
支持 320px ~ 1920px 宽度范围,涵盖 iPhone SE、iPhone 标准系列、iPad 及主流 Android 设备 |
| 响应式设计 |
页面布局使用响应式设计(Flexbox/Grid),在不同分辨率下自动适配布局 |
| 触控交互 |
按钮/链接触控区域 ≥ 44×44pt,支持手势滑动操作 |
3.4 可用性
| 要求项 |
指标 |
| 系统可用性 |
核心功能可用性 ≥ 99.5%(月累计停机 ≤ 3.6 小时) |
| 数据备份 |
数据库每日自动全量备份,保留最近 7 天备份 |
| 灾难恢复 |
从备份恢复数据的时间目标(RTO)≤ 4 小时,数据恢复点目标(RPO)≤ 24 小时 |
4.用户角色权限矩阵
4.1 角色定义
| 角色 |
说明 |
| 管理员 |
系统内置超级管理员,拥有全部管理权限(仅 1 个账号) |
| 注册用户 |
通过邮箱注册并验证通过的用户 |
| 访客 |
未登录或未注册的用户 |
4.2 权限矩阵
| 功能模块 |
操作项 |
管理员 |
注册用户 |
访客 |
| 管理员登录 |
登录后台管理系统 |
✔ |
— |
— |
| 用户注册 |
提交注册申请 |
— |
✔ |
✔ |
| 用户登录 |
登录前台系统 |
— |
✔ |
— |
|
第三方登录扩展入口 |
— |
✔(预留) |
— |
|
忘记密码(联系管理员) |
— |
✔ |
✔ |
| 博客发布 |
创建/编辑博客 |
✔(代发) |
✔ |
— |
|
保存草稿 |
✔ |
✔ |
— |
|
发布文章(公开) |
✔ |
✔ |
— |
|
发布文章(私密) |
✔ |
✔ |
— |
|
发布文章(仅粉丝可见) |
✔ |
✔ |
— |
|
修改文章可见性状态 |
✔ |
✔(仅自己的文章) |
— |
|
删除文章 |
✔ |
✔(仅自己的文章) |
— |
| 博客浏览 |
查看公开博客列表 |
✔ |
✔ |
✔ |
|
搜索/筛选博客 |
✔ |
✔ |
✔ |
|
查看私密博客 |
✔(不可见) |
✔(仅自己的) |
— |
|
查看仅粉丝可见博客 |
✔ |
✔(关注者可见) |
— |
| 评论功能 |
查看评论 |
✔ |
✔ |
✔ |
|
发表评论 |
✔ |
✔ |
— |
|
回复评论 |
✔ |
✔ |
— |
|
删除/屏蔽评论 |
✔ |
— |
— |
|
评论审核开关配置 |
✔ |
— |
— |
| 后台管理 |
管理用户账号 |
✔ |
— |
— |
|
管理分类与标签 |
✔ |
— |
— |
|
重置用户密码 |
✔ |
— |
— |
|
管理敏感词库 |
✔ |
— |
— |
|
查看操作日志 |
✔ |
— |
— |
注:「—」表示无权操作;「✔」表示有权操作。
5.界面交互要求
5.1 整体设计风格
| 要求项 |
说明 |
| 设计风格 |
简洁、现代、内容优先,采用卡片式设计 |
| 色彩体系 |
主色调柔和,文字对比度符合 WCAG 2.1 AA 级标准(对比度 ≥ 4.5:1) |
| 字体 |
系统默认字体栈,支持中文显示,字号层级清晰(标题/正文/辅助文字) |
| 暗色模式 |
需同时支持浅色与深色模式,跟随系统设置或用户手动切换 |
5.2 关键页面交互要求
5.2.1 博客列表页
- 文章卡片需展示:标题、摘要(截取前 120 字、封面图、发布时间、阅读量、分类名称
- 鼠标悬停卡片时显示缩放效果(scale: 1.02)
- 加载下一页支持「滚动加载」与「分页器」两种模式(可配置)
- 加载过程中显示骨架屏占位,禁止出现大面积空白
5.2.2 文章详情页
- 文章正文使用合适的排版间距(行高 1.8、段间距 16px),确保阅读体验
- 图片查看支持点击放大(Lightbox 灯箱效果)
- 文章底部展示标签列表与分享按钮
- 评论区采用时间线样式,楼层号标识,楼中楼回复缩进展示
5.2.3 博客编辑页
- 富文本编辑器采用左右分栏布局,右侧为实时预览区
- 草稿自动保存时显示「已保存」状态指示器
- 发布按钮需二次确认弹窗,提示文章可见性设置
5.2.4 移动端适配
- 导航栏折叠为汉堡菜单
- 文章列表改为单列布局
- 编辑器工具栏收起为可展开的浮动按钮
- 评论输入框吸附在屏幕底部
5.3 异常与边界状态
| 状态 |
交互要求 |
| 空状态 |
列表/搜索结果为空时,展示友好的空状态插图与提示文案 |
| 加载状态 |
数据加载中展示骨架屏或 Loading Spinne |
| 错误状态 |
网络异常/服务错误时,展示错误提示页并提供「重新加载」按钮 |
| 超时处理 |
接口请求超时(≥ 10s)时主动提示用户并允许重试 |
6.测试验收标准
6.1 功能测试
| 测试项 |
覆盖要求 |
通过条件 |
| 管理员登录 |
覆盖成功登录、密码错误、验证码触发、账号锁定、IP 封禁、登录日志验证 |
所有用例 100% 通过 |
| 用户注册 |
覆盖成功注册、邮箱重复、密码强度校验、频率限制、邮箱验证 |
所有用例 100% 通过 |
| 用户登录 |
覆盖成功登录、多端限制、密码锁定、忘记密码流程、会话保持 |
所有用例 100% 通过 |
| 博客发布 |
覆盖全文编辑(含图片/视频)、草稿自动 |
覆盖排序、筛选、全文检索、分页、私密可见性、浏览量统计 |
| 评论功能 |
覆盖发表评论、多级回复限制、审核流程、违规处理、身份标识、回复通知 |
所有用例 100% 通过 |
6.2 非功能测试
6.2.1 性能测试
| 测试项 |
测试方法 |
通过条件 |
| 前端首屏加载 |
使用 Lighthouse 在 4G 限速环境下测试 |
首屏加载 ≤ 2 |
| 接口响应时间 |
使用 JMeter 或 Locust 对列表/详情接口发起并发请求 |
95% 请求 ≤ 500ms |
| 并发用户 |
模拟 500 用户并发用户执行浏览、搜索操作 |
系统无宕机,错误率 ≤ 1% |
6.2.2 安全测试
| 测试项 |
测试方法 |
通过条件 |
| SQL 注入 |
使用 SQLMap 对所有输入框注入测试 |
无法通过注入获取数据 |
| XSS 攻击 |
在评论区/博客内容中提交 <script>alert(1)</script> |
脚本不可执行,HTML 被转义 |
| 接口 |
批量调用登录接口,检查频率限制是否生效 |
超过阈值后接口返回 429 状态码 |
| 密码存储 |
检查数据库用户表密码字段 |
存储为 bcrypt,不可逆 |
6.2.3 兼容性测试
| 测试项 |
测试方法 |
通过条件 |
| 浏览器兼容 |
在 Chrome/Edge/Safari 各最近 3 个版本中执行核心功能冒烟测试 |
核心功能在所有目标浏览器中表现一致 |
| 移动端适配 |
在 iPhone SE/iPhone 16/ |
页面布局正常,无元素溢出,触控交互正常 |
6.3 验收流程
- 提测阶段:开发完成功能后,由测试团队依据本文档编写测试用例并执行测试
- Bug 修复:P0/P1 级缺陷需在 24 小时内修复并回归,P2 级缺陷需在交付前完成修复
- 验收通过条件:
- 全部 P0/P1 级缺陷已修复且回归通过
- 功能测试用例通过率 ≥ 99%
- 性能测试指标达标
- 安全测试无高危漏洞
- 上线会签:产品、开发、测试三方确认验收通过后,方可发布上线
文档结束
本文档覆盖博客系统的全部核心功能需求与非功能性需求,可作为产品、开发、测试团队的需求基线文档。如有需求变更,需通过变更评审流程更新本文档并更新版本号。