2017-03-03 57 views
0

這裏是我的火力結構:火力地堡規則不正常工作

-posts 
-public 
    -countryCode 
    -US 
    -KeJ9qrPZYWD-b0AdQ3I 
    -timestamp:1488544558698 
    -postAuthor:TT4l2xyIOFRXI3RZINffcSFs67O2 
    -KeAVVwWQ-OuwyMRycI4 
    -timestamp:1488544595373 
    -postAuthor:TT4l2xyIOFRXI3RZINffcSFs67O2 
-users 
-TT4l2xyIOFRXI3RZINffcSFs67O2 

而且我想允許用戶閱讀從過去24小時或帖子,如果用戶是帖子的作者則沒有限制,所以我做了我的火力點像這樣的規則:

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     ".read": "$uid === auth.uid", 
     ".write": "$uid === auth.uid" 
     } 
    }, 
    "posts":{ 
     ".write" : "auth != null", 
     "public":{ 
     "countryCode":{ 
     "$countryCode_id":{ 
      "$post" :{ 
      ".read" : data.child('postAuthor').val() === auth.uid || data.child('timestamp').val() > (now - 86400000) 
      } 
     } 
    } 
} 
} 
    } 
} 

,但它不工作,我可以編寫一個新的,但不能讀取任何東西,即使職位在指定的時間或由目前的作者提出,有什麼不對?

編輯: 好的,所以我發現規則的規則:「規則不是過濾器」,它破壞我的想法一點點,因爲我需要閱讀訪問我的帖子的父母,但如果我會標記爲已讀我的帖子將被讀取無論作者或時間將會是級聯的原因 - 非常令人沮喪:(所以現在我需要弄清楚如何做到這一點。我的第一個想法是創建另一條路徑所有帖子,並從那裏獲取所有帖子,其中所有帖子都將被標記爲read:true,然後使用observesingleevent(.value)獲取每個帖子的關鍵字,並直接觀察當前帖子在另一個分支上,我可以設置我的讀寫權限,我是否想好?

+0

從編輯部分它聽起來你需要閱讀關於[數據結構化和非規範化]的文檔(https://firebase.google.com/docs/database/ios/structure-data#best_practices_for_data_structure) –

回答

0

沒有看到代碼給出的問題,它是很難確定。但很有可能你試圖從你沒有閱讀權限的級別閱讀。例如: -

ref = FIRDatabase.database().reference("/posts/public/countryCode/US") 
query = ref.queryOrdered(byChild: "postAuthor").queryEqual(toValue: "TT4l2xyIOFRXI3RZINffcSFs67O2") 
query.observeEventType(.Value, withBlock: { snapshot in 
    ... 

此查詢將失敗,因爲用戶沒有對/posts/public/countryCode/US讀取權限。與您可能認爲的相反,Firebase查詢不能用於過濾數據。這在火力地堡背景下,稱爲「規則並不濾鏡」我建議查看:

+0

是的,我已經知道了,我編輯了我的後,你可以採取一個廁所k如果我在那裏? –