我具有以下数据结构:
Orders
|_ -M6LSRsTuVY
|___ Cust_ID: "6WERv67YUVT"
|___ Items: "A, B, C, D"
|___ Status: "Query"
|___ Location: "xyz"
这表明这是对用户下达的订单的查询。 Cust_ID包含下订单的客户的用户ID。用户列表是一个不同的列表。该订单将对ID与Cust_ID匹配的用户以及类型为Supplier的用户可见。我不在此处提供该数据结构。如果需要,也可以提供。
现在,我为这两种用户类型附加了值事件侦听器,如下所示:
mRef.orderByChild("Status").equalTo("Query").addValueEventListener
上面是供供应商查看处于“查询”阶段的订单,下面是供下订单的用户的
mRef.orderByChild("Cust_ID").equalTo(userid).addValueEventListener
当数据库安全性规则设置为“ true”时,这两种搜索都可以完美地工作。然后,我更改了安全规则,以便只有ID与Cust_ID匹配的Customer或类型为Supplier的用户才能读取订单。 “读取”的数据库安全规则如下:
".read": "(auth != null && query.orderByChild === 'Cust_ID' && query.equalTo === auth.uid)
||(auth != null && query.orderByChild === 'Status' && query.equalTo === 'Query')",
放置此安全规则后,Customer ID与用户ID匹配的第二个搜索操作可以完美地工作。但是供应商搜索“查询”的第一个搜索操作不起作用,因为存在“权限被拒绝”。
有人可以帮忙这里发生的事情吗?