如何允许Firebase用户仅访问他们创建的文档(rules_version ='2')

时间:2020-07-22 16:24:32

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

我知道已经存在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}
    }
  }
}

1 个答案:

答案 0 :(得分:1)

执行以下操作。通过使用sizeof通配符,它​​可以在您的规则中使用{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; } } } read使用相同的规则,如下所示:

write