Firebase规则:用户是否有权查看文档

时间:2019-05-17 16:07:51

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

我正在尝试编写一些规则,以允许用户仅访问他们有权访问的文档。

我有两个集合:“旅行”和“用户”集合。

“旅行”集合有几个旅行(文档),名称分别为“ 001”,“ 002”,“ 003”,...

users集合具有名称为“ user1@mail.com”,“ user2@mail.com”,...的用户(文档)。

在每个用户内部都有一个名为“ allowedTravels”的对象(地图),在其中跟踪用户可以看到的旅行。像这样:

travels: {
  001: {
    name: 'Nice travel'   
  },
  002: {
    name: 'Amazing Trip'
  }
}


users: {
  user1@email.com: {
    allowedTravels: {
      001: {
        hasPayed: true
      }
    }
  },
  user2@mail.com: {
    allowedTravels: {
      001: {
        hasPayed: false
      },
      002: {
        hasPayed: true
      }
    }
  }
}

我想要的是仅允许用户访问旅行证件,而在这种情况下,用户1应该可以访问旅行001,而用户2应该可以访问旅行001和002。

我要检查的是,如果用户文档中的allowedTravels对象中有一个名为“旅行文档”的属性。如果是这样:允许,如果不是:拒绝

此刻,我的规则如下:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read: if isSignedIn();
    }
  }

  function isSignedIn() {
    return request.auth.uid != null;
  }
}

我尝试过的是这样的:

match /{document} {
  return exists(/users/${request.auth.email}/allowedTravels/{document})
}

实现我正在寻找的正确方法是什么? 感谢您能给我的任何帮助。谢谢!

0 个答案:

没有答案