Files
election-system/docs/cms-setup.md
T
2026-08-29 16:16:26 +08:00

42 lines
3.6 KiB
Markdown

# CMS 初始化与安全边界
## 运行模式
`ElectionSystem.Cms` 是独立的 Orchard Core 3.0.1 Headless CMS 主机。它仅管理公开内容、媒体、审核和发布历史,不是选举业务服务,也不能访问匿名选票、已投状态、线下计票或内部审计表。
首次启动时运行 `dotnet run --project src/ElectionSystem.Cms` 并访问 CMS 主机根路径,在初始化页面选择 **Headless** 配方和 **MySql** 提供程序,再输入连接字符串。生产环境应使用独立数据库,例如 `election_cms`;不要与 `election` 业务数据库共用表、账户或迁移历史。
请在部署前由数据库管理员创建 CMS 专用数据库及最小权限账户。Orchard Core 会验证连接后创建自己的表,但不会创建数据库;本仓库不会自动创建数据库或自动完成 CMS 初始化。
初始化完成后,在 **Configuration → Features** 启用 `ElectionSystem.Cms.PublicContent`。该模块的数据迁移会自动创建下列固定公开栏目和公共元数据字段;停用模块不会删除已有公开内容。
## 公开前台接入
选举主程序的 Razor Pages 通过 CMS 主机的只读 `GET /api/public-content` 接口读取内容,绝不直连 CMS 数据库。该接口只允许固定公开内容类型,并且只返回已发布版本的标题、正文、发布时间和公开元数据;草稿、历史版本、选民资料、投票状态、线下计票和内部审计记录均不会返回。
开发环境中主程序默认读取 `http://localhost:5065`。如 CMS 使用其他地址,配置主程序的 `Cms:PublicContentBaseUrl`(部署时使用环境变量 `Cms__PublicContentBaseUrl`)。CMS 未初始化、模块未启用或短暂不可用时,公开前台显示可恢复的“内容服务暂不可用”提示,选举业务不受影响。
内容编辑完成后必须先发布,才会出现在公开首页和 `/content` 各固定栏目中;前台内容详情固定为 `/content/item/{内容 ID}`,不接受 CMS 编辑器自定义路由来覆盖选举系统路由。
## 首批内容类型
在 CMS 的 Content Definition 中创建以下类型,并统一启用 Title、HTML/Markdown 正文、SEO、Taxonomy、Autoroute、Publish Later、Archive Later 和版本历史:
| 类型 | 必需字段 | 限制 |
| --- | --- | --- |
| ElectionNotice | 活动外部标识、适用受众、生效时间 | 不含选民名单或参与状态 |
| PolicyDocument | 规则版本、生效日期、附件 | 历史版本不能原地覆盖 |
| CandidateDisclosure | 活动外部标识、候选人公开资料、公示期 | 不含联系方式、内部审核意见 |
| VoterGuide | 引导类别、适用范围 | 不透露任何个体资格结果 |
| ResultAnnouncement | 结果发布版本标识、统计口径 | 只能引用 Election API 已发布结果 |
| Faq | 问题、答案、排序 | 不接收个人申诉材料 |
| DownloadAsset | 文件、版本、适用范围 | 受文件安全与下载策略控制 |
固定栏目以独立内容类型呈现,不能由编辑任意改名或删除;每项内容还带有“适用受众”和活动外部标识。后续将启用 Taxonomies 作为可扩展专题标签,但标签不能改变固定栏目或绕过发布审核。
## 发布与权限
配置 CMS 编辑、审核员、发布员、媒体管理员和选举联络员角色。发布流程必须是草稿、提交审核、退回或通过、定时/立即发布、下线/归档;回滚创建新版本并保留审计。
CMS 到公开站的集成只能是只读公开内容接口。结果、参与率和实时票数由 `ElectionSystem.Api` 根据活动公开策略裁决后提供;CMS 不得直接查询选举 MySQL 数据库。