2017-02-23 26 views
0

我有我的規則集。通常情況下,所有數據只能由認證的人閱讀。但是,我想要例外。這些是我的規則:如何在多個級別的Firebase規則中添加排除數據?

"rules": { 
    "users": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "$uid === auth.uid", 
     "ForEveryone": { 
     ".read": true, 
      ".write": true 
     } 
     "NoWrite" : { 
      ".read": true, 
      ".write": false 
     } 
     } 
    } 

所以我說我有3個字符串。字符串1被稱爲私人,並且認證者可以讀取和寫入。字符串2是ForEveryone,所以每個人都可以更改和寫入數據。字符串3是NoWrite,對於每個人,但你不能寫信給它。

我收到一個錯誤,說:Expecting a ; or " at the line NoWrite。那麼我做錯了什麼?這是錯誤的放置}?謝謝。

+0

首先,您在關閉paren之後錯過了「NoWrite」上方的逗號。您的ForEveryone和NoWrite節點實際上是users/uid父節點的子節點嗎? – Jay

回答

0

這裏是你的規則,適當的間隔,所以你可以看到父節點和子節點之間的關係。看起來這不是你想要的。所以這不是一個真正的答案,但會導致更好的問題,我們可以回答。一旦我們知道OP之後會更新。

{ 
    "rules": { 
     "users": { 
      "$uid": { 
       ".read": "$uid === auth.uid", 
       ".write": "$uid === auth.uid", 
       "ForEveryone": { 
        ".read": true, 
        ".write": true 
       }, 
       "NoWrite" : { 
        ".read": true, 
        ".write": false 
       } 
      } //end uid 
     } //end users 
    } //end rules 
} //outside closure 
+0

我不知道這是否是故意的,但您確實解決了OP的問題。 –

2

您對規則結構採取的方法不起作用。 Firebase安全規則級聯,這意味着授予任何節點的權限將適用於其任何子級和樹狀結構。您無法在節點上授予讀取或寫入訪問權限,然後將其撤銷。 (但你可以授予上述權限。)請參閱docs on rule cascading

就你而言,你希望有一些用戶數據可以被任何人寫入,有些則不能。從您的示例中不清楚您是否想要NoWrite僅由經過身份驗證的用戶或無人寫入。根據how you will be reading this data,您需要將這些數據分成不同的集合,或者使$uid不可訪問,並且僅爲ForEveryoneNoWrite定義規則。

第一種方法可能是這樣的:

"rules": { 
    "users-public": { 
     "$uid": { 
     ".read": "true", 
     ".write": "true", 
     }, 
    "users-nowrite": { 
     "$uid": { 
     ".read": "true", 
     ".write": "$uid === auth.uid" 
     } 
    } 

或第二,像這樣:

"rules": { 
    "users": { 
     "$uid": { 
     "ForEveryone": { 
      ".read": "true", 
      ".write": "true" 
     }, 
     "NoWrite" : { 
      ".read": "true", 
      ".write": "$uid === auth.uid" 
     } 
     } 
    } 

至於你的語法錯誤,你需要一個逗號,"NoWrite"前右括號後。

相關問題