平台管理教程
平台级管理功能指南:站点生命周期、用户体系、角色模板、内容模型、敏感词库、操作日志与在线会话。
站点生命周期管理
rsSites 将每个子站视为独立实体,通过「站点管理」面板统一控制子站的完整生命周期。每个子站具有以下内置状态:
- 待启用 — 站点已创建但尚未激活,前台不可访问
- 运营中 — 正常服务状态,前台和后台均可正常使用
- 已暂停 — 暂时停用(如维护、合规等原因),前台返回维护页面,后台可访问但内容不可编辑
- 已禁用 — 彻底关闭访问,前后台均不可使用,数据保留不删除
创建站点
进入「站点管理」→「新建站点」,填写以下核心信息:
- 站点名称 — 后台显示用的友好名称
- 唯一别名(
site_alias) — 用于 URL 路径标识,创建后不可修改 - 绑定域名 — 可选,支持独立域名或入口域名 + 路径两种访问模式
- 默认语言 — 站点初始化时的默认语种
站点创建后自动生成独立的数据库 schema 和文件存储目录,各子站间数据物理隔离。
克隆站点
克隆功能将现有站点的栏目结构、内容模型定义、角色配置和模板文件整体复制到新站点,但不复制实际内容数据。适用于快速搭建同类型子站的场景(如多个城市分站使用相同栏目结构)。克隆操作在后台异步执行,完成后自动通知平台管理员。
启停与暂停
在站点列表中对任意站点执行状态变更:
- 启用 — 将「待启用」或「已暂停」的站点切换为「运营中」
- 暂停 — 站点进入维护模式,前台显示可自定义的维护页面;暂停期间内容只读
- 禁用 — 彻底关闭,访客和管理员均无法访问。禁用不会删除数据,可随时重新启用
用户与组织管理
rsSites 采用「平台级统一用户 + 子站级授权」的混合架构。用户账号在平台层全局唯一,而角色和权限按子站分配。
跨子站统一用户体系
所有用户账号(包括平台管理员、子站管理员、编辑、审核人等)均存储在平台层用户表中。同一用户可以被添加到任意数量的子站,在每个子站中可以拥有不同的角色。用户只需一个账号即可跨站工作,登录后通过站点切换器在不同子站间无缝跳转。
用户认证支持:本地密码(bcrypt 哈希)、LDAP/AD 集成(企业部署)、以及 OAuth2/OIDC 第三方登录(如企业微信、飞书等)。
部门维护
平台支持两级组织架构:部门组(如「集团总部」)和部门(如「技术部」「市场部」)。部门可以跨子站关联——例如「集团总部 / 技术部」可以作为整体被添加到多个子站中,部门成员自动继承子站的访问权限。部门管理员可以独立维护本部门成员列表,无需平台管理员介入。
账号软删除
删除用户时采用软删除策略:账号被标记为已删除状态,个人数据保留(满足审计合规要求),但该账号立即丧失所有站点的登录和操作权限。被软删除的账号在 180 天保留期内可由平台管理员恢复;超期后系统自动清理个人身份信息,仅保留操作日志中的匿名化引用。
全局角色模板
角色模板是一套可复用的权限配置方案。rsSites 预置了常用角色模板,也支持平台管理员自定义。
预置角色
系统出厂自带以下角色模板,可直接使用或作为自定义基础:
- 子站管理员 — 拥有子站内全部管理权限(栏目、内容、成员、模板)
- 内容编辑 — 可创建、编辑、删除自己负责栏目的内容,提交审核
- 审核人 — 可审核待审内容(通过 / 退回 / 要求修改)
- 只读访客 — 仅可查看后台内容列表和统计,不可编辑
每个角色模板明确定义了可访问的功能模块和操作粒度(读取 / 创建 / 编辑 / 删除 / 发布 / 审核)。
复制到新站点
创建新站点时,可选择一键复制平台级的角色模板集到该站点。复制后,子站管理员可在站点内进一步调整角色权限,不影响平台模板。平台管理员修改全局模板后,可选择「推送到已复制的站点」来批量更新。
内容模型定义
内容模型(Content Model)是 rsSites 的核心抽象之一。它定义了某种内容类型所包含的字段结构,类似于数据库表 schema 但面向内容管理场景设计。
模型与字段
每个内容模型由以下要素组成:
- 模型名称 — 如「新闻文章」「产品页」「常见问题」
- 模型标识 — 系统内部使用的唯一 ID,创建后不可修改
- 所属分组 — 可选,用于在模型列表中分类展示
一个模型包含若干自定义字段,字段定义模型下每条内容的数据结构。
字段类型
rsSites 支持以下内置字段类型:
- 文本 — 单行文本
- 数字 — 整数或小数
- 日期 — 日期选择器
- 布尔 — 开关/复选框
- 图片 — 图片上传,支持类型和大小限制
- 文件 — 文件上传,支持类型和大小限制
- 富文本 — TipTap 块编辑器
- 下拉选择 — 预定义选项列表
模型与字段关系
模型与字段是一对多关系:一个模型可以有多个字段,每个字段属于且仅属于一个模型。字段支持排序、必填标记和默认值。字段类型一旦有内容条目使用即锁定不可更改,防止新旧数据解释不一致。
敏感词库维护
rsSites 内置敏感词过滤引擎,平台管理员可在「敏感词库」面板中统一维护敏感词列表。敏感词库在平台层共享,对所有子站生效。
添加与删除敏感词
支持单个添加敏感词,每个敏感词需指定:
- 匹配类型 — 普通词(plain,Aho-Corasick 自动机一次扫描命中所有)或正则(regex)
- 分类 — 政治敏感 / 违法违规 / 广告推广
正则类型的敏感词在添加时自动编译校验,语法错误直接拒绝保存。删除敏感词后,历史命中记录中的敏感词 ID 自动置空,快照字段保留原文,不影响过去的检测记录。
提交拦截与全量扫描
内容提交审核时自动经过敏感词过滤引擎,命中即阻断提交,同时写入命中记录和操作日志。系统定时任务每 6 小时对全平台已发布内容执行一次全量扫描,新增敏感词可回溯覆盖历史内容。平台管理员也可通过后台按钮手动触发全量扫描。
跨站汇总视图
平台管理员可查看所有子站的敏感词命中情况——内容标题、命中词、所在站点、处理状态。支持按状态筛选,用于集中抽查和治理。
操作日志查询
rsSites 记录平台和所有子站的关键操作日志,满足安全审计和问题排查需求。操作日志一旦写入即不可篡改或删除。
筛选查询
操作日志支持多维度组合筛选:
- 按站点 — 查看单个子站或全部站点的操作记录
- 按用户 — 追踪特定用户的所有操作行为
- 按操作类型 — 登录 / 创建 / 编辑 / 删除 / 发布 / 审核 / 配置变更等
- 按时间范围 — 精确到秒的起止时间
- 按目标资源 — 操作涉及的具体内容、栏目或配置项
每条日志记录包含:操作时间、操作人、IP 地址、User-Agent、操作类型、目标资源标识、变更前后摘要(diff)。
永久保留
操作日志同步写入 PostgreSQL,默认永久保留,不设自动清理策略。日志可按站点、用户、操作类型、时间范围筛选查询,子站管理员只能查看本站日志,平台管理员可跨站查询。
在线会话管理
「在线会话」面板提供当前所有活跃用户会话的实时视图,帮助平台管理员掌握系统使用情况并进行安全干预。
查看在线用户
会话列表展示以下信息:
- 用户 — 账号名和显示名称
- 当前站点 — 用户正在操作的子站
- 登录时间 — 会话创建时间
- 最后活跃 — 最近一次请求的时间,实时刷新
- IP 地址 — 会话来源 IP
- 设备 — 浏览器和操作系统信息
支持按用户、站点、IP 筛选,以及按登录时间或活跃时间排序。
强制下线
平台管理员可以对任意活跃会话执行强制下线操作。执行后:
- 该会话的 JWT token 立即加入黑名单,后续请求直接拒绝
- 用户被重定向到登录页,并提示「会话已被管理员终止」
- 操作记录写入操作日志,注明操作人和原因
支持批量强制下线——按用户(踢出该用户的所有会话)、按站点(踢出某站点的所有在线用户)、或按 IP 范围。适用于安全事件响应场景(如账号被盗、异常登录)。
核心机制解析
下面从代码实现角度,梳理平台级管理背后几个关键机制的工作原理。
站点生命周期
系统把「站点」视为一等实体:建站时生成独立的文件存储目录,各子站的模板与上传文件目录级隔离,数据库层面按 site_id 逻辑隔离,不同站点的用户看不到彼此的数据;克隆则复制栏目结构、内容模型、角色与模板,但刻意不含内容数据,用于快速搭建同类型分站。站点的运营 / 暂停 / 废弃是一组明确状态,暂停时前台返回可定制维护页、后台内容只读。
跨站协作通过「内容推送」完成:源站推送的内容进入目标站的接收 / 拒绝队列,由目标站管理员决定采纳与否;站点整体还能导出为栏目树 + 内容草稿的 JSON、再导入(支持 dry-run 预演),便于迁移与备份。
统一用户与组织
账号在平台层全局唯一,角色与权限按子站分配——一个账号可跨多个子站拥有不同角色。登录采用平台 / 子站双入口,配图形验证码与失败锁定;管理员可「模拟登录」以他人身份操作,全程带审计并展示「正在模拟」横幅。会话可被单踢或全踢,IP 黑名单在最外层中间件统一拦截。
治理与可观测
敏感词引擎用 Aho-Corasick 自动机一次扫描命中所有词(含正则类型),内容提交时即拦截并留痕;定时任务每 6 小时对全平台已发布内容做全量扫描,新词可回溯历史。操作日志写入后即不可篡改,支持按站点 / 用户 / 操作类型 / 时间 / 资源多维筛选并永久保留,以满足审计;访问统计由定时聚合任务计算趋势与热门,通知中心维护未读计数。