
語言 🇹🇼 繁體中文
背景
實作
什麼是存取控制? 
With FastComments SSO Access Control,有時稱為 RBAC,使用者可以被限制只能存取特定的頁面或評論串。此外,
使用者只能 @mention 同群組的其他人。
詳細說明
我們可以將 Users 以及選擇性地將 Pages 放入群組。
當 Users 被放入群組,且在 Widget Settings 中啟用 Limit Comments by SSO User Groups 時,使用者
將只會看到來自相同群組使用者的評論,且只能 @mention 相同群組的使用者。
此外,Pages 也可以被放入群組,然後使用者只能存取他們有權限存取的頁面的評論。
我們稱之為 "User-Level" 群組與 "Page-Level" 群組。
那麼,哪一種適合您?
使用 User-Level 群組如果...
- 您想要使用相同的
urlId值(頁面 URL 或文章 ID),但依群組限制評論。 - 例如,您希望有「New User」和「Veteran User」群組,且他們在相同頁面上永遠不會看到彼此的評論。
使用 Page-Level 群組如果...
- 您的群組有特定的頁面。
- 例如,屬於「Public Pages」群組的使用者不應該查看「Top Secret」的文章。
運作方式 
FastComments 的存取控制透過將 Pages 和 Users 指派到所需的群組來運作。
群組只是字串識別碼,例如 GREEN 或 abc-123。
Users 與 Pages 並不限於單一群組。它們各自最多可被指派至 100 與 1000 個群組。
存取未授權的頁面
如果使用者嘗試存取其無權限的頁面,會看到如下的錯誤訊息:
訊息文字可以自訂。
規範 
定義多名使用者如何互動並進行測試很複雜。以下是我們用於存取控制的規格,您可以用來測試您的實作:
頁面群組 ids 為 null,使用者群組 ids 為 null - 應該可以存取。
頁面群組 ids 為 null,使用者有群組 ids - 應該可以存取。
頁面有群組 ids,使用者群組 ids 為 null - 應該可以存取。
頁面有群組 ids,使用者的群組為空列表 - 不應該可以存取。
頁面有群組 ids,使用者有群組 ids - 有交集時 - 應該可以存取。
頁面有群組 ids,使用者有群組 ids - 無交集時 - 不應該可以存取。
頁面的群組 ids 為空列表(沒有人有存取權),使用者為 null - 不應該可以存取。
SSO 使用者 A = 未定義群組 ids(null = 完全存取)。
SSO 使用者 B = 未定義群組 ids(null = 完全存取)。
A 可以 @B。
SSO 使用者 A = 未定義群組 ids(null = 完全存取)。
SSO 使用者 B = 定義了群組 ids。
A 可以 @B。
SSO 使用者 A = 定義了群組 ids。
SSO 使用者 B = 未定義群組 ids(null = 完全存取)。
A 可以 @B。
SSO 使用者 A = 群組 ids = [a]。
SSO 使用者 B = 群組 ids = [b]。
A 不可以 @B。
SSO 使用者 A = 群組 ids = [a]。
SSO 使用者 B = 群組 ids = [a, b]。
A 可以 @B。實作 
在其他群組中提及使用者
如果兩位使用者分屬兩個互不重疊的群組集合,且沒有交集,他們將無法彼此 @mention。
如果使用者手動輸入 @mention 並提交留言,該內容將維持為純文字。另一位使用者不會被標註。
維護群組
Groups 是分別透過 Pages 與 SSOUsers API 資源定義的。
Pages API 可被呼叫來定義允許存取該頁面的群組集合。預設情況下,所有群組,以及
不屬於任何群組的使用者,皆有存取權限。
類似地,SSOUsers API 可被呼叫來定義與每位使用者關聯的群組。
對於這兩個資源,設定或更新群組的時機沒有限制。
如果只想限制使用者彼此 @mention,則無需考慮 Pages。
注意!
定義與更新 SSO 使用者群組不需要使用 API,取而代之可以透過在傳遞給留言元件的 SSO 載荷中定義 群組 id 來自動更新。然而,對於大量的群組清單,不建議這麼做,因為使用者 必須在每次頁面載入時提交此載荷。
範例 API 呼叫 
在此我們將說明如何呼叫 FastComments API 以設定存取控制。
在開始之前,注意我們不需要明確建立 Group 結構。群組只是加到 Users 與 Pages 的識別符。將群組新增到使用者或頁面會自動「建立」該群組。
首先,讓我們建立兩個使用者,User A 與 User B,並將他們一開始放在 Group X:


現在讓我們建立一個 Page。我們稱它為 Confidential Page,目前這些使用者都無法存取,因為該頁面屬於群組 CONFIDENTIAL:

使用者 A 與 B 目前無法存取該新頁面。然而,因為他們在同一個群組 GROUP-X,他們仍然可以互相 @mention。
讓我們更新 User B,使他們可以存取該頁面:

User B 現在屬於兩個群組。我們的使用者仍然可以互相 @mention,但只有 User B 可以查看我們的機密頁面。
讓 User B 只能查看機密頁面:

現在他們可以查看機密頁面,但我們的兩位使用者都無法互相 @mention,因為他們屬於不同的群組。
然而,任何未納入存取控制的使用者仍然能夠存取我們的頁面。為了避免這種情況,請確保沒有 SSO 使用者的 groupIds 被設為 null。例如,讓我們建立 User C,他可以存取所有內容:

透過將 groupIds 設為 null,我們表示他們不受存取控制限制。
現在,讓我們建立一個每個人都能存取的頁面:

透過將 accessibleByGroupIds 設為 null,我們表示此 Page 不受存取控制,而兩位使用者皆可存取。
此 API 存取控制操作說明到此結束。