2017-10-07 71 views
0

我正在開發一個電子商務Web應用程序,我需要在數據庫創建後立即發出命令,以防止用戶甚至可以通過站點管理員編輯訂單。使用Firebase權限將數據創建爲只創建一次

我有這個在我的規則

"orders":{ 
    "$order": { 
     ".read": "$order == auth.uid || auth.isAdmin == true", 
     ".write": "$order == auth.uid && (data.child('orders').child($order).hasChildren(['items', 'datePlace', 'shipping', 'totalPriceOfOrder']) !== newData.hasChildren(['items', 'datePlace', 'shipping', 'totalPriceOfOrder'])" 
    }, 
    ".read": "auth.isAdmin == true" 
} 

這個($order == auth.uid || auth.isAdmin == true)".write"$order目的是確保只有在用戶可以寫入命令對象並在項目進行有uid作爲密鑰簽名。

(data.child('orders').child($order).hasChildren(['items', 'datePlace', 'shipping', 'totalPriceOfOrder']) !== newData.hasChildren(['items', 'datePlace', 'shipping', 'totalPriceOfOrder'])的目的是爲了確保只有在以前不存在表格的情況下才能寫入。

這不是工作,我不知道爲什麼它不工作。

回答

2

這通常說,如果auth.uid == $order,驗證您的系統可以寫入到數據庫或修改

".write": "$order == auth.uid && (data.child('orders').child($order).hasChildren(['items', 'datePlace', 'shipping', 'totalPriceOfOrder']) !== newData.hasChildren(['items', 'datePlace', 'shipping', 'totalPriceOfOrder'])" 

對於只讀使用

".read": "$order == auth.uid || auth.isAdmin == true" 
".write": "!data.exists()" 

!data.exists()將允許您一次寫入數據庫,並贏得了」允許更新或刪除。用戶可以閱讀它,但不能更新。

+0

您的解決方案的工作,但似乎有另一個問題,auth.isAdmin被拒絕在客戶端上而不是在模擬權限。 –

+0

請您詳細說明一下嗎? – leopragi

+0

好吧我會添加更新我的問題,包括它。 –