# 博客系统需求规格说明书 | 文档版本 | 修订日期 | 修订人 | 修订内容 | | :------ | :------- | :----- | :------- | | 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 | 评论中包含 | 脚本不可执行,HTML 被转义 | | 接口 | 批量调用登录接口,检查频率限制是否生效 | 超过阈值后接口返回 429 状态码 | | 密码存储 | 检查数据库用户表密码字段 | 存储为 bcrypt,不可逆 | #### 6.2.3 兼容性测试 | 测试项 | 测试方法 | 通过条件 | | :----- | :------- | :------- | | 浏览器兼容 | 在 Chrome/Edge/Safari 各最近 3 个版本中执行核心功能冒烟测试 | 核心功能在所有目标浏览器中表现一致 | | 移动端适配 | 在 iPhone SE/iPhone 16/ | 页面布局正常,无元素溢出,触控交互正常 | ### 6.3 验收流程 1. **提测阶段**:开发完成功能后,由测试团队依据本文档编写测试用例并执行测试 2. **Bug 修复**:P0/P1 级缺陷需在 24 小时内修复并回归,P2 级缺陷需在交付前完成修复 3. **验收通过条件**: - 全部 P0/P1 级缺陷已修复且回归通过 - 功能测试用例通过率 ≥ 99% - 性能测试指标达标 - 安全测试无高危漏洞 4. **上线会签**:产品、开发、测试三方确认验收通过后,方可发布上线 --- > **文档结束** > > 本文档覆盖博客系统的全部核心功能需求与非功能性需求,可作为产品、开发、测试团队的需求基线文档。如有需求变更,需通过变更评审流程更新本文档并更新版本号。