【问题标题】:Firebase security rules aren't working with functionsFirebase 安全规则不适用于函数
【发布时间】:2020-12-08 06:08:12
【问题描述】:

我设置了一个简单的安全规则,它使用一个函数来确定用户是否可以访问系统中的容器,每个 container 和每个 user 都有一个 owner 字段,以下比较但是不起作用:

查询:

      await firebase.firestore().collection('containers').where('owner', '==', owner)
        .get()
        .then(({ docs }) => {
          const containers = getters.get_containers;
          const containersArray = docs.map(doc => ({ id: doc.id, ...doc.data() }));

          docs.forEach(doc => (containers[doc.id] = doc.data()));

          commit('set_containers', containers);
          commit('set_containers_array', containersArray);
        })
    function getUser() {
      return get(/databases/$(database)/documents/users/$(request.auth.uid));
    }

    function canAccessContainer(container_id) {
      return (getUser().data.owner == get(/databases/$(database)/documents/containers/$(container_id)).data.owner);
    }

    match /containers/{container_id} {
      allow read: if isAuthenticated() && canAccessContainer(container_id) <------- not working
      allow update: if isAuthenticated() && isUserInOrg();
      allow create: if isAuthenticated() && isUserInOrg() && !docExists(container_id, 'containers');
      allow delete: if isAuthenticated() && isUserInOrg();
    }

【问题讨论】:

  • 安全规则本身不做任何事情。它们仅在与执行查询的应用程序代码配对时才有意义。请编辑问题以显示未按您期望的方式工作的查询,以及规则运行所需的任何数据库文档。问题中应该有足够的信息,任何人都可以重现该问题。
  • 刚刚意识到我可以使用资源变量。谢谢。
  • 如果您已完成此问题,请删除它或自己回答。
  • 老实说,我在争论是否花钱请人帮我做这些,文档让人无法弄清楚

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


【解决方案1】:

所以经过一段时间的研究,我意识到我在后端使用了很多触发器来在很多地方执行数据转换/操作。

这些触发器导致命令“链”静默失败,并且真的不需要安全规则,基本上将安全规则设置为“isAuthenticated”、“isUserInOrg”,并匹配文档的 ownerId 足以保护我的应用程序。

【讨论】:

    猜你喜欢
    • 2021-05-14
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    相关资源
    最近更新 更多