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

Working with Firebase permissions for making data readonly once created

我正在开发一个电子商务网络应用程序,我需要在数据库上创建只读订单,这样可以防止编辑用户生成的订单,即使是网站管理员也可以。

我的规则中有这个

"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" at $order 中的目的是确保只有登录用户才能写入订单对象和 at 项目,其中 uid 作为键.

(data.child('orders').child($order).hasChildren(['items', 'datePlace', 'shipping', 'totalPriceOfOrder']) !== newData.hasChildren(['items', 'datePlace', 'shipping', 'totalPriceOfOrder']) 的目的是确保仅当 table 以前不存在时才能进行此写入。

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

这通常表示如果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() 将允许您写入数据库一次,不允许更新或删除。用户可以阅读但不能更新。