一個人架站的時期,後台只有自己進出,怎麼設定都不會出事。但網站做到第二年,多半會出現第二、第三個合作對象,可能是內部同事,也可能是外部接案的寫手、SEO 顧問、設計師。帳號一個一個開出去,沒幾個月就會發現有人改了不該改的設定,或外包合約結束半年了,舊帳號還靜靜留在使用者列表裡。
WordPress 權限分配的麻煩,在於它不是一次性決策。團隊組成會變動、外包項目會輪換、合作關係會結束,每一次調整都是一次安全縫隙。預設的五種角色解決了 80% 的場景,剩下 20% 落在「該開的功能差一個、不該開的功能多一個」這種斷層上。把角色開法、自訂工具、雙因子驗證、撤權流程一起想清楚,網站才不會因為團隊規模擴張而變脆。
五種協作角色該開到哪、又該關到哪
WordPress 預設提供管理員(Administrator)、編輯(Editor)、作者(Author)、投稿者(Contributor)、訂閱者(Subscriber)五種角色,加上多站模式才有的超級管理員(Super Admin)。多數中小型站台只會用到中間四種,把預設權限對照到實際工作職責,是權限分配的起點。
下面用協作場景而非職稱來分,因為同一個人在不同站台可能扮演不同角色。
- 內部主編走編輯:可發布、編輯、刪除任何人的文章與頁面,能管理分類、標籤、留言審核,但動不到外掛、佈景主題、使用者管理。這一階負責內容把關,是審稿動線的終點
- 內部寫手走作者:可撰寫、修改、發布自己的文章,能上傳媒體,但碰不到他人稿件與站台設定。適合長期穩定供稿、不需要主編逐篇審閱的同事
- 外包寫手走投稿者:可撰寫、修改自己的草稿,但不能直接發布,也不能上傳媒體。稿件停在待審狀態,必須由編輯或管理員點下發布才會上線。媒體上傳的限制要靠後段流程補足,由主編收到圖檔自行上傳,或用檔案傳輸服務交付
- SEO 外包走自訂角色:預設沒有「只能改 meta 與分類、不能改正文」這種角色,需要自訂。基礎能力包含 edit_posts、edit_others_posts、manage_categories,但要關掉 publish_posts 與 delete_posts,避免誤刪稿件或讓未審稿件上線
- 設計外包走自訂角色:能力範圍是切換佈景主題、編輯 CSS、上傳媒體,但不該開放外掛安裝與使用者管理。預設的編輯角色管不到主題、預設的管理員又開太多,這層幾乎一定要自訂
訂閱者角色預設只能修改自己的個人資料,會員制網站才用得到。一般部落格與企業官網如果開放讀者註冊,務必把預設新註冊角色設為訂閱者,不要留成作者或更高權限,這個位置設定在「設定 > 一般 > 新使用者預設的使用者角色」,是最常被忽略的洞。
編輯與作者的差距決定審稿流程是否成立
很多站長分不清編輯與作者的差別,覺得反正都能寫文章,差一階沒什麼。但這一階的權限差異,直接決定了團隊有沒有審稿流程。
作者能發布自己的稿件,意思是寫完按下「發布」,文章就在公開網域上了,主編在這個流程裡沒有任何攔截點。如果這個寫手是內部資深員工、文章不需要他人把關,作者角色合理。但只要稿件需要編輯校對、需要法務確認用字、需要主管核可方向,作者就開錯了,權限給到這個位階,等於繞過所有審核機制。
投稿者就不同。寫完按下「提交審閱」,文章卡在待審清單,必須由編輯或管理員手動發布才會上線。同一個人、同一份稿,光是角色降一階,整個工作流程就從「發完才看」翻轉成「看完才發」。
這個切分還有另一層意義。媒體上傳的能力,預設綁在作者以上的角色。投稿者不能上傳圖片,必須由編輯協助處理。對外包來說,這反而是一道乾淨的分工線,寫手只交付純文字稿,圖檔由內部主編統一處理,色調、尺寸、命名、壓縮規則才會一致。把媒體權限留在內部,比放給每個外包自由處理要可控得多。
SEO 外包與設計外包不該共用同一個角色
「外包」這兩個字常常被當成一種角色處理,但 SEO 外包與設計外包要動的東西完全不同。前者要改 meta、改分類、改內鏈,後者要改 CSS、換主題、調版型。把兩者塞進同一個自訂角色,等於每個外包都被開了用不到的權限。
SEO 外包的工作會碰到三類資料,分別是文章 meta(標題、描述、焦點關鍵字)、分類與標籤,以及站台地圖外掛的設定。理想的權限切法是 edit_posts、edit_others_posts、edit_published_posts、manage_categories 全開,但 publish_posts、delete_posts、delete_others_posts 全關。這樣外包可以修改任何文章的後設資料與分類歸屬,但不能把文章下架,也不能讓未審稿件直接上線。
設計外包的工作則完全落在外觀層。需要的能力是 switch_themes、edit_theme_options、edit_css,加上 upload_files 供其上傳圖片。完全不需要 edit_posts,因為設計師不該動內文,要看版面樣子,靠範例文章或測試頁面就夠。權限給太多,反而會發生「設計師為了測效果改了正文又忘了改回來」這種事故。
兩種外包的權限重疊區其實很小,幾乎只有 upload_files 一項。實務上比較順的做法是各自開一個角色,例如「SEO 編輯」「設計協作」,用自訂角色外掛建立,分派時對應到實際工作,而不是統一開一個「外包」角色給所有人。
自訂角色外掛比起手動編輯 Capability 合算嗎
WordPress 沒有內建的圖形化角色編輯工具,要建立自訂角色,要嘛在 functions.php 寫 add_role() 函式,要嘛安裝外掛。三套主流方案各有取捨,下表整理選型差異。
| 比較項目 | Members | User Role Editor | PublishPress Capabilities |
|---|---|---|---|
| 安裝數規模 | 約 20 萬次啟用 | 超過 70 萬次啟用 | 約 10 萬次啟用 |
| 介面風格 | 一頁式 Capability 勾選 | 表格式分組勾選 | 分頁式分組管理 |
| 核心能力管理 | 完整支援所有預設與自訂 Capability | 完整支援,介面最易熟悉 | 完整支援,分類最清楚 |
| 自訂文章類型權限 | 自動偵測 CPT 並列出 | 自動偵測 CPT 並列出 | 自動偵測,分頁切換最方便 |
| 內容存取控制 | 免費版內建,可鎖文章給特定角色 | 免費版無,需付費 Pro | 免費版部分支援 |
| 後台選單隱藏 | 付費版支援 | 付費版支援 | 免費版即支援 |
| 自訂角色匯入匯出 | 付費版支援 | 付費版支援 | 免費版即支援 |
| 適合對象 | 想要會員制+角色管理一站式整合的站長 | 只要快速調 Capability、不想學新介面的站長 | 多站多角色、需要匯出設定到別台的站長 |
選型邏輯其實很單純。若站台只有一兩位外包、調完就結案,User Role Editor 的學習成本最低,幾分鐘就能設定完成。若站台有會員制、要把部分內容鎖給付費讀者,Members 的內容存取功能能省下另一支外掛的位置。若旗下有好幾個站台、角色設定要重複佈署,PublishPress Capabilities 的匯出匯入是免費版唯一支援的。
手動寫 add_role() 程式碼當然也行,但每次調整都要動主題檔案,加上沒有版本紀錄,半年後沒人記得當初為什麼開那個 Capability。外掛的優勢是把這層設定變成可視化資料,後人接手時點開就懂。
雙因子驗證該強制給哪些角色
帳號被盜的成本與該帳號的權限成正比。管理員被盜,攻擊者能安裝後門外掛、修改網域導向、刪除全站資料;訂閱者被盜,攻擊者頂多看到自己的個人資料頁。雙因子驗證(Two-Factor Authentication, 2FA)的部署策略,要對應到這個風險梯度,而不是全站一視同仁。
主流的 WordPress 2FA 外掛有四個方向可選。WP 2FA 是專做這件事的獨立外掛,支援 TOTP 應用程式、電子郵件、簡訊、備用碼,免費版可針對「特定角色強制啟用、其他角色選用」做政策設定,是中小站台最常見的選擇。Wordfence Login Security 把 2FA 跟登入頁面 CAPTCHA、XML-RPC 防護綁在一起,適合本來就在用 Wordfence 防火牆的站台,不會多裝一個外掛。Two Factor Authentication 由 WordPress 貢獻者社群維護,直接整合到使用者個人資料頁,介面最乾淨,沒有付費版。miniOrange 則是功能最多的一套,連硬體金鑰、推播通知都支援,適合需要符合企業資安規範的網站。
部署策略上,管理員與編輯一定要強制 2FA,沒有妥協空間。作者、投稿者與自訂的 SEO 與設計角色,建議強制,但可視團隊接受度分階段推行。訂閱者與一般會員預設不強制,但開放選用,讀者帳號被盜雖然影響有限,但會留下不好的使用體驗。
備用碼一定要在啟用 2FA 當下生成並讓使用者另存,否則手機損壞、認證器資料遺失時,帳號會直接被鎖在外面,最後只能從資料庫手動解除。這個情境每隔一段時間就會發生在客戶身上,預先準備備用碼成本最低。
外包合作結束後的撤權判斷
外包合約結束、員工離職、實習生階段性任務完成,這些時點都需要撤權。但撤權不只是刪除帳號這麼簡單,背後牽扯到文章歸屬、登入紀錄、第三方授權、API 金鑰幾個面向。下表把撤權時要逐項檢視的處理動作與延遲不處理的風險整理出來。
| 項目 | 處理動作 | 延遲不處理的風險 |
|---|---|---|
| 使用者帳號 | 將帳號狀態改為停用或直接刪除,刪除時把該使用者的文章轉移給管理員或主編 | 帳號保留=攻擊面保留,被盜後可直接登入;直接刪除不轉移會連帶刪掉該作者所有文章 |
| 應用程式密碼 | 撤銷該使用者所有 Application Passwords,這是 REST API 與外部工具的長期憑證 | 即使主帳號刪除了,舊的應用程式密碼若沒撤銷,外部工具仍可呼叫 API |
| 第三方授權連動 | 解除該使用者透過 OAuth 授權給 Google、Meta、Mailchimp 等第三方的存取權 | 第三方服務仍能以該使用者身分讀寫資料,常見於 SEO 外包離開後 GSC 權限沒收回 |
| 共用 API 金鑰 | 重新生成站台層級的 API 金鑰(Yoast、Cloudflare、CDN、金流等),尤其是該外包經手過設定的服務 | 外包帶走的金鑰可繼續使用,若該服務有付費額度會被持續消耗 |
| 後台登入紀錄 | 檢查最近 30 天該帳號的登入 IP、登入時間、操作紀錄,確認沒有異常 | 撤權前的異常存取若沒抓到,等於把證據一起刪掉 |
| 文章作者欄位 | 將該使用者名下文章的作者欄位改派給仍在職的人員,或建立一個「站台編輯部」共用帳號承接 | 文章作者欄位指向已刪使用者,前端會顯示空白或預設值,影響 E-E-A-T 與 SEO |
| 自訂角色定義 | 若該外包是唯一使用某自訂角色的人,評估是否一併刪除該角色定義 | 角色定義留著不會出事,但累積久了使用者管理頁會塞滿用不到的選項 |
實務上建議把這份對照表存成一份內部 SOP 文件,外包結案當天就照表執行,不要拖到下個月才處理。撤權延遲一週與一個月,被利用的機率差異很大。
權限設計是網站維運裡最不顯眼但代價最高的一塊。一次規劃清楚,後續每接一位協作者,只要對應到既有角色、開啟 2FA、約定撤權時點,整個流程就跑得順。等到網站長到要常態收外包的規模,這套機制會省下大量臨時應變的時間。