> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# 內容管理

型別化的 CMS 條目，生命週期自由流轉，並有公開讀取邊界。

## 初學者演練

先決條件：閱讀下面的兩個初學者指南，完成 Web 本地設定，並在編輯器的根目錄中開啟此 monorepo。網頁設定屬於`apps/web/.env.local`； Next.js不讀取根`.env`。預設fake模式下的`/dashboard`是無資料庫演示； `/auth` 需要遷移資料庫。

簡而言之：工作區是一個團隊的單獨使用者、資料和設定。伺服器是可信後端；讓提供商金鑰遠離瀏覽器和電話程式碼。遷移是建立或更新表的版本化資料庫更改。人工智慧模型是回答的引擎；型號目錄是伺服器上可用型號 ID 和價格的列表。提供商是一種外部服務，例如人工智慧、電子郵件或計費服務。權利是允許工作區使用某項功能的授權。 Webhook 是一個服務傳送到另一個服務的 URL 的訊息。

1. 以工作區所有者或管理員身份登入，開啟 `/content`，然後使用表單建立具有唯一別名的帖子、頁面、檔案或報告。將其儲存為草稿，然後釋出。

2.確認狀態變更為已釋出；沒有管理訪問許可權的重複 slug 或成員應該會失敗。

3. 對於門控測試，使用`required_entitlement=ai.reference-task`；如果沒有經過驗證的授權，該頁面必須僅顯示其預告片。

對於自定義程式碼，請從提供的 `prompts/README.md` 開始，然後複製最接近的提示：對於應用程式螢幕為 `prompts/new-app-screen.md`，對於公共頁面為 `prompts/new-landing-page.md`。對於伺服器、資料庫或提供商工作，請為您的編碼代理提供本指南的任務，並要求其讀取 `AGENTS.md`、`.ai/PROJECT_CONTEXT.md` 和匹配的 `.ai/` 映象；檢查此處指定的確切原始檔；列出檔案並在編輯前進行檢查；保留工作區所有權和僅限伺服器的機密；並向您展示差異。告訴它您想要的行為、輸入和輸出欄位、允許的角色、預期的成功和錯誤以及測試帳戶、提供程式或裝置。使用樣本值；永遠不要貼上真正的秘密。

[開始之前](https://supastack.dev/zh-tw/docs/web/before-you-start.md)

[終端基礎知識](https://supastack.dev/zh-tw/docs/web/terminal-basics.md)

[網路本地設定](https://supastack.dev/zh-tw/docs/web/ship-in-5-minutes.md)

[座席提示和專案記憶體](https://supastack.dev/zh-tw/docs/web/agents.md)


## 建立工作區條目

`/content` 管理器處理 `post`、`page`、`doc` 和 `report` 條目。 `content_entry` 行具有草稿/已釋出/存檔狀態、工作區範圍的段和作者身份。管理操作需要適當的所有者/管理員角色。

此 CMS 與 `src/resources` 中套件的型別化公共 docs/blog 目錄分開。產品可以通過自己的頁面組合呈現CMS條目。


## 將主體門控到伺服器上

`required_entitlement` 可為空：未設定的條目未門控。對於門控條目，僅伺服器 `content-queries.ts` 會投影可讀內容或帶有空正文的鎖定預告片。 `content-access.ts`擁有投影；永遠不要相信客戶提供的權利主張。

釋出發出`content.published`；預定摘要可以總結出版團隊最近的條目。創作內容也參與帳戶匯出。


## 驗證釋出和訪問

測試草稿可見性、釋出/存檔轉換、重複的段、錯誤的工作空間、免費條目和不活動的付費贈款。使用付費牆塊進行演示，而伺服器仍然負責訪問。

[付費內容教程](https://supastack.dev/zh-tw/docs/web/setup-ai.md)

[內容摘要](https://supastack.dev/zh-tw/docs/web/project-structure.md)

[付費牆介紹](https://supastack.dev/zh-tw/docs/web/project-structure.md)


## 安裝與配置

/content 工作區介面管理 CMS 條目——post、page 和 doc 是建議型別，但該列接受任何 URL 安全的產品型別（小寫字母、數字、連字元、下劃線，最長 64 個字元）。content_entry 表將每行限定在 workspaceId 內，記錄 createdBy，並按工作區和型別保持 slug 唯一。

條目遵循自由的 draft ↔ published ↔ archived 生命週期——src/content.ts 中的 evaluateContentStatusChange 拒絕無效或無變化的轉換，publishedAt 在首次釋出時打上時間戳，並在之後的取消釋出中保留，讓訪客始終看到最初的釋出日期。

```
/content                    workspace CMS surface
src/content.ts              input + lifecycle rules
src/content-actions.ts      member+ mutations
content_entry               workspaceId, type, slug, status
```


## 實現流程

member 及以上角色才能寫入條目——每次變更都通過 requireWorkspaceWriter（workspace-access.ts）解析會話、活動工作區和至少 member 角色，guest 保持只讀。normalizeContentEntryInput 在寫入前驗證型別、1–255 字元的標題和 URL 安全的 slug。

listPublishedContentEntries 是有意設定的公開讀取邊界：它接受顯式的 workspaceId，不需要會話，只返回已釋出的行——店鋪頁面、部落格和檔案正是通過它渲染工作區內容。釋出會發出一個出站 content.published webhook，寫入的條目也會進入 GDPR 資料匯出。


## 驗證與排障

走完一次完整的 draft → publish → archive 流程，驗證同型別內重複 slug 與跨工作區讀取的行為。確認公開邊界永遠不會返回草稿或其他工作區的行，且 content.published 每次釋出動作只觸發一次。


## 下一篇

[電商](https://supastack.dev/zh-tw/docs/web/commerce.md)
