子站管理教程

栏目管理、内容编辑与发布、审核工作流、成员与角色、模板管理、导航菜单及站点设置。

栏目管理

栏目是子站内容的骨架,采用树形结构组织,支持无限层级嵌套。每个栏目属于以下四种类型之一:

URL 映射

每个栏目配置一个唯一的 URL 路径片段(slug),系统按照栏目树的层级自动拼接路径。例如栏目层级 新闻 > 行业动态,若 slug 分别为 news 和 industry,则前台访问路径为 /news/industry。支持为栏目绑定独立域名或路径前缀,实现灵活的多站点映射。

排序与可见性

栏目支持拖拽排序,同层级下按设置的顺序在前台渲染导航。每个栏目可独立控制是否在导航菜单中显示,以及是否对游客可见(需要登录才可访问的受保护栏目)。

内容编辑与发布

内容编辑采用 BlockNote 块编辑器,提供所见即所得的编辑体验。编辑器基于 ProseMirror 构建,支持丰富的块类型:

草稿与已发布

每条内容有明确的状态流转:草稿 → 已提交 → 已发布。编辑器中可随时保存草稿,内容不会出现在前台。点击「提交审核」后内容进入审核队列;审核通过后点击「发布」,内容即时上线。已发布的内容支持创建修订版本,修订在审核通过前不影响线上版本。

发布策略

除即时发布外,系统还支持定时发布和发布后自动下架(设置过期时间)。这对于时效性内容(如活动公告)非常实用。

审核工作流

审核工作流支持多步审批,每一步可指定不同的审核人和审核策略。

工作流配置

每个栏目可绑定一个审核工作流。工作流由多个步骤组成,例如:编辑初审 → 主编复审 → 终审发布。每一步可配置:

驳回与重新提交

任何一步审核人可选择「驳回」,填写驳回原因。内容退回到提交者手中,提交者根据反馈修改后可重新提交。驳回原因会以通知形式推送给提交者,并在内容详情页中展示审核历史。

进度追踪

内容详情页展示完整的审核进度条,清晰标注当前所在步骤、已通过的步骤和待处理的步骤。提交者和审核人均可看到实时状态。所有审核操作(通过/驳回/撤回)均记录在操作日志中,可追溯。

成员与角色

子站支持独立的成员管理体系,与平台级的用户和角色体系协同工作。

添加与移除成员

子站管理员可在「成员管理」中通过用户名或邮箱搜索平台用户,将其添加为子站成员。移除成员时,该成员在本子站的所有角色授权即刻失效。

授权角色

角色定义了成员在子站内的操作权限。系统预置了常用角色(编辑、审核人、管理员),同时支持基于平台角色模板创建子站自定义角色。授权时可以选择角色生效的栏目范围——某个角色可以仅对特定栏目及其子栏目生效,实现精细化的权限隔离。例如:成员 A 是「科技」栏目的编辑,但对「财经」栏目仅有只读权限。

栏目范围

栏目范围授权是 rsSites 权限模型的亮点:同一成员可以在不同栏目拥有不同角色。授权时勾选目标栏目(支持勾选父栏目自动包含所有子栏目),该角色即限定在所选栏目范围内生效。

模板管理

模板决定了子站前台页面的视觉呈现。rsSites 使用 Tera 模板引擎,模板文件通过内置的 Monaco 编辑器 进行在线编辑。

Monaco 编辑器

模板编辑界面集成了 Monaco 编辑器(VS Code 内核),提供语法高亮、自动补全、代码折叠、多光标编辑等专业特性。编辑器支持 Tera 语法提示,帮助开发者快速编写模板。

生命周期管理

每个模板有独立的版本和状态:

发布模板时系统自动记录版本快照,支持一键回滚到任意历史版本。

Git 同步

模板支持与 Git 仓库双向同步。可以将模板推送到远程 Git 仓库进行版本管理和团队协作,也可以从 Git 仓库拉取模板。同步支持自动(保存时推送)和手动两种模式,Git 凭据在平台设置中统一管理。

导航菜单与聚合页

导航菜单配置

每个子站可配置多组导航菜单(如主菜单、页脚菜单、侧边栏菜单)。菜单项支持四种来源:

菜单项支持多级嵌套、图标、打开方式(当前窗口/新窗口)以及可见性条件(如仅对登录用户显示)。

内容卡片

内容卡片是前台页面中展示内容摘要的 UI 单元。每个栏目可配置其内容列表的卡片样式:标题图、摘要长度、发布时间显示、作者信息等。卡片支持多种布局模式:列表、网格、瀑布流、轮播。

聚合页

聚合页是一种特殊的页面类型,它不绑定单一栏目,而是从多个栏目中按规则聚合内容。聚合规则包括:

聚合页适用于首页、专题页面、标签聚合等需要跨栏目展示内容的场景。

站点设置

基本信息

站点名称、副标题、Logo(支持亮色/暗色双图)、Favicon、站点描述。这些信息会在前台模板中作为全局变量提供,模板可以灵活引用。

SEO 设置

全局 SEO 配置包括:默认页面标题模板(如 {内容标题} - {站点名称})、默认 Meta Description、Meta Keywords。单个栏目和单条内容可覆盖全局设置,实现精细化的 SEO 优化。系统自动生成规范的 <title> 和 <meta> 标签。

ICP 备案

支持填写 ICP 备案号,系统自动在页面底部展示。支持中国大陆的 ICP 备案号和公安备案号,格式校验并自动生成链接。

robots.txt 与 Sitemap

系统为每个子站自动生成 robots.txt,管理员可自定义其内容(如禁止抓取特定路径)。Sitemap 同样自动生成,包含所有已发布内容的 URL、最后更新时间、更新频率等字段,支持 XML 和 HTML 两种格式。站点启用后,Sitemap 的 URL 会自动提交至搜索引擎(需配置相关凭据)。

核心机制解析

下面从代码实现的角度,梳理子站日常使用背后几个关键机制是如何运转的,帮助你理解「为什么这样设计」。

内容状态机

每条内容都是一个明确的有限状态:草稿 → 已提交 → 已发布,外加「已下线 / 重新上线」的可逆切换。编辑器保存的只是草稿,不影响前台;点击发布时,系统先写入一条版本快照(store_version),再把内容标记为已发布。正因为每次变更都落了快照,详情页才能随时查看历史版本、并把任意快照恢复到草稿态——版本历史与回滚并非独立模块,而是同一套快照机制的产物。

在此之上,内容还支持「多栏目归属」(除主栏目外再挂到额外栏目,前台多个列表都能出现)与「内容-卡片绑定」(同一条内容在不同位置呈现不同卡片样式),并可通过批量接口统一发布 / 下线 / 删除 / 排序。

权限模型:角色 + 范围 + 栏目

权限不是「管理员 / 普通用户」的二分,而是三层叠加:角色定义一组权限点(如 content.publish 只在 own / any 两种范围生效),栏目范围再把角色限定到具体栏目及其子栏目。于是同一个成员在「科技」栏目可以是编辑、在「财经」栏目只是只读——这种组合在授权时通过勾选父栏目自动继承子栏目完成。预置的 7 个角色只是起点,平台角色模板可被复制到子站后再微调。

前台渲染管线

前台是服务端渲染:每个子站持有自己独立的 Tera 实例,请求到达后由调度器按 URL 分发到首页 / 列表 / 阅读 / 聚合 / 单页 / 话题 / 博客等渲染函数。模板通过「Slot」机制与具体页面解耦——模板只声明占位(如 hero、sidebar、main),运行时按「内容模型别名 → 栏目 slug → 全局默认」的优先级匹配对应 slot 文件,所以一套布局能自动适配多种内容类型。

搜索与 SEO 同样由渲染层统一处理:搜索走应用层分词(jieba-rs)配合 PostgreSQL 全文检索并跨全站栏目聚合;sitemap.xml、robots.txt、Article 结构化数据在请求时按需拼装,博客模式则是一个站点级开关,打开后列表页切换为时间线式呈现。