Firebase安全规则检查多个引用

时间:2019-06-03 15:58:56

标签: firebase google-cloud-firestore firebase-security-rules

我正在开发一个应用程序,在该应用程序中,我需要一组属于某个组(商店)的用户(雇员),以便仅当这些客户的某个员工下了订单时才能从“客户”表中读取同一家商店。 到目前为止,这是我的结构(顶层是集合):

Users: [
 {id: 1, name: "John", store: "a"},
 {id: 2, name: "Jane", store: "a"},
 {id: 3, name: "Charles", store: "b"},
],
Stores: [
 {id: "a", name: "Store A"},
 {id: "b", name: "Store B"},
],
Customers: [
 {id: "1", name: "Customer 1", ...data},
 {id: "2", name: "Customer 2", ...data}
],
Orders: [
 {id: "001", customer: "/Customers/1", employee: "/Users/1"},
 {id: "002", customer: "/Customers/2", employee: "/Users/3"}
]

在此示例中,John和Jane应该能够看到客户1 ,但是不能看到客户2,而Charles应该能够看到客户2 ,但是不能看到客户1。

我试图做一个函数来做到这一点,就像这样:

function canSeeCustomers() {
    if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.store == ?
}

但是我不知道如何对照 Orders 集合检查 store 字段。

有没有办法做到这一点?还是我会更好地重构数据库结构以使 Users Stores 的子文档?

1 个答案:

答案 0 :(得分:0)

也向您的客户添加商店数据。 stores: {a: true}。 所以你可以做

allow read: if resource.data.stores[get(/databases/$(database)/documents/users/$(request.auth.uid)).data.store];