2017-08-14 108 views
0

我想爲我的數據庫設置安全規則的一個特定的值,我想只有用戶管理員從這一特殊羣體閱讀,但我的規矩唐沒有工作。火力地堡數據庫:添加規則,找出所有孩子的

當我設置一個特定的索引時唯一的工作。我不知道如何檢查所有索引。這在某種程度上可能嗎?

數據庫: database

規則:

{ 
    "rules": { 
    "groups": { 
     "$groupid": { 
     ".write": "!data.exists()", 
     ".read": "data.child('users').child('$index').val() == auth.uid || data.child('admins').child('$index').val() == auth.uid" 
     } 
    }, 
    "users": { 
     "$uid": { 
     ".read": "auth != null", 
     ".write": "$uid === auth.uid" 
     } 
    } 
    } 
} 
+0

你能告訴我們什麼不工作?是否因爲該組以外的其他用戶/管理員可以讀取該組的數據? – Wilik

+0

不,因爲沒有人,甚至用戶和管理員都可以讀取他們組的數據。我更新了規則。他們有內部測試的解決方法^^ – janik174

回答

1

我建議你更改數據庫結構弄成這個樣子。把用戶的ID爲users的子鍵和admins

{ 
    "groups": { 
     <groupId1>: { 
      "admins": { 
       <uid1>: true, 
       <uid2>: true 
      }, 
      "description": "some description", 
      "users": { 
       <uid3>: true, 
       <uid4>: true, 
       <uid5>: true 
      }, 
      ... 
     }, 
     <groupId2>: { 
      ... 
     } 
    } 
} 

那麼這個數據庫的規則將做的工作

{ 
    "rules": { 
     "groups": { 
      "$groupid": { 
       ".write": "!data.exists()", 
       ".read": "data.child('users').child(auth.uid).val() == true || data.child('admins').child(auth.uid).val() == true" 
      } 
     } 
    } 
} 

希望這有助於:)

+0

耶,我認爲這是唯一的方法。謝謝 :) – janik174