我正在开发一个电子商务网络应用程序,我需要在创建后立即对数据库进行订单,以防止用户甚至由网站管理员生成编辑订单。
我的规则中有这个
"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'])
的目的是确保只有在以前不存在表时才能进行此写操作。
这不起作用,我不知道它为什么不起作用。
答案 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()
将允许您向数据库写入一次,并且不允许更新或删除。用户可以阅读但不能更新。