WordPress 權限分配實戰:從五種角色到外包撤權的完整指南

一個人架站的時期,後台只有自己進出,怎麼設定都不會出事。但網站做到第二年,多半會出現第二、第三個合作對象,可能是內部同事,也可能是外部接案的寫手、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、約定撤權時點,整個流程就跑得順。等到網站長到要常態收外包的規模,這套機制會省下大量臨時應變的時間。

相關文章
標籤: 外包管理, WordPress 權限分配, 使用者角色, 自訂角色, 雙因子驗證