我有一堆集合來定義安全規則,它們都有邏輯OR運算子來說明管理員權限。這是一個這樣的例子:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function isAdmin() {
return request.auth != null && get(/databases/$(database)/documents/userProfiles/$(request.auth.uid)).data.admin == true;
}
function isSignedIn() {
return request.auth != null;
}
function isOwnDocument() {
return request.auth.uid == request.resource.id
}
match /userSettings/{doc} {
allow read: if isOwnDocument() || isAdmin();
allow write: if isOwnDocument() || isAdmin();
}
}
}
相反,我可以預先宣告管理員權限并省略OR操作員嗎?
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function isAdmin() {
return request.auth != null && get(/databases/$(database)/documents/userProfiles/$(request.auth.uid)).data.admin == true;
}
function isSignedIn() {
return request.auth != null;
}
function isOwnDocument() {
return request.auth.uid == request.resource.id
}
match /{document=**} {
allow read: if isAdmin();
allow write: if isAdmin();
}
match /userSettings/{doc} {
allow read: if isOwnDocument();
allow write: if isOwnDocument();
}
}
}
這是一個好習慣嗎?
uj5u.com熱心網友回復:
相反,我可以預先宣告管理員權限并省略 OR 運算子嗎?
是的!
我剛剛檢查了 Firebase 控制臺中的規則游樂場。

要嘗試規則游樂場,請轉到 Cloud Firestore 的“規則”選項卡,然后單擊“規則游樂場”。您將在規則編輯器的左下方看到它。在那里,您可以構建資料和經過身份驗證的狀態,并從那里模擬請求。
這是一個好習慣嗎?
是的,當然了。它將使您的 Firestore 規則更清晰。所以你不需要||在每場比賽中都投入(或)。
解釋
來自 Firebase 檔案:
一個檔案可以匹配多個匹配陳述句。在多個允許運算式匹配一個請求的情況下,如果任何一個條件為真,則允許訪問
因此,當isAdmin()為 true 時(并且因為它是為所有檔案預先宣告的),Firestore 將允許訪問這些檔案。
從問題評論...
您能否通過自定義宣告設定管理員來詳細說明您的意思?
自定義宣告是 Firebase 中的一項功能,您可以在其中為用戶分配不同的角色。您可以使用自定義宣告來設定管理員權限、教師權限或您的應用所需的任何角色。
自定義宣告采用有效的 JSON(最好是帶有布林值的鍵值對)。
可以在 Firebase 的不同部分訪問用戶的自定義宣告:
- 在客戶中,通過
idToken, - 在 admin SDK 中,通過
auth.token和 - 在安全規則中(針對 Firestore、實時資料庫和存盤)。
因此,在 Firebase 的任何一個部分中,您都可以檢查經過身份驗證的用戶的自定義宣告,以授予他們對資源的訪問權限。
請注意,自定義宣告不應用作資料存盤以從 Firebase 身份驗證擴展 User 物件。它們主要用于安全規則。Firebase 將拒絕超過 1000 位元組的自定義宣告。
此外,您只能在管理 SDK 中管理專案的自定義宣告。
在此處了解自定義宣告。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/489322.html
標籤:火力基地 谷歌云火库 firebase-安全
