使用Firebase权限在创建数据时只读取数据

时间:2017-10-07 07:02:44

标签: firebase firebase-realtime-database firebase-security

我正在开发一个电子商务网络应用程序,我需要在创建后立即对数据库进行订单,以防止用户甚至由网站管理员生成编辑订单。

我的规则中有这个

"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'])的目的是确保只有在以前不存在表时才能进行此写操作。

这不起作用,我不知道它为什么不起作用。

1 个答案:

答案 0 :(得分: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()将允许您向数据库写入一次,并且不允许更新或删除。用户可以阅读但不能更新。