【问题标题】:How to allow firebase user to only access documents that they created (rules_version = '2')如何允许 firebase 用户仅访问他们创建的文档(rules_version = '2')
【发布时间】:2020-07-22 16:24:32
【问题描述】:

我知道已经存在 answer to this question on StackOverflow,但我想我的用例有点不同。

我在 firestore 上有两个集合:“用户”和“模板”

每次创建用户时,我都会创建一个模板并将模板 id 分配给相同的用户 id,如下所示。

** Repository.js **


async createUser(email, password) {
    const template = await getLocalTemplate()
    const credentials = await auth.createUserWithEmailAndPassword(email, password)

    await db.collection('users').doc(credentials.user.uid).set({ email })
    await db.collection('templates').doc(credentials.user.uid).set({
      ...template,
    })
    
    return credentials
  }

但是,我不知道如何允许用户只写入其模板。

这些是我的 Firestore 规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    
    match /users/{user} {
      allow create
      allow read, write: if request.auth.uid == user
    }
    
    match /templates/{template} {
      allow read, create
      allow write: if request.auth.uid == /users/{user}
    }
  }
}

【问题讨论】:

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


    【解决方案1】:

    请按以下步骤操作。通过使用{template} 通配符,它​​使template 变量在您的规则中可用。

    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        
        match /users/{user} {
          allow read: ...;  
          allow write: if request.auth != null && request.auth.uid == user;
        }
        
        match /templates/{template} {
          allow read: ...;  
          allow write: if request.auth != null && request.auth.uid == template;
        }
      }
    }
    

    您可以对readwrite 使用相同的规则,如下所示:

    allow read, write: if request.auth != null && request.auth.uid == template;
    

    【讨论】:

      猜你喜欢
      • 2021-09-28
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      相关资源
      最近更新 更多