Firebase 使用运行时生成的集合设置Firestore安全规则

Firebase 使用运行时生成的集合设置Firestore安全规则,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,每当新用户注册到我的应用程序时,我的Firestore数据库就会创建一个新集合。集合的名称是新用户的用户名。我想使此集合中的文档具有受限的写访问权限 service cloud.firestore { match /databases/{database}/documents { match /User1/{info} { allow read: if signedIn(); allow write: if isOwner(User1); }

每当新用户注册到我的应用程序时,我的Firestore数据库就会创建一个新集合。集合的名称是新用户的用户名。我想使此集合中的文档具有受限的写访问权限

service cloud.firestore {
  match /databases/{database}/documents {

    match /User1/{info} {
      allow read: if signedIn();
      allow write: if isOwner(User1);
    }

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

    function isOwner(userId) {
      return request.auth.uid == userId;
    }    
  }
} 

如果当前用户是
User1
,但不适用于任何注册的新用户,则此选项有效。如何将此Firestore安全规则添加到每个新用户?

我注意到第一个规则与
/User1/{info}
匹配,这意味着它将匹配集合
User1
中的任何路径。相反,如果使用括号,该值将变为通配符,这意味着匹配将适用于任何值。有关更多信息,请查看中的示例

service cloud.firestore {
  match /databases/{database}/documents {

    match /{username}/{info} {
      allow read: if signedIn();
      allow write: if isOwner(username);
    }

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

    function isOwner(userId) {
      return request.auth.uid == userId;
    }    
  }
} 

我注意到第一条规则与
/User1/{info}
匹配,这意味着它将匹配集合
User1
中的任何路径。相反,如果使用括号,该值将变为通配符,这意味着匹配将适用于任何值。有关更多信息,请查看中的示例

service cloud.firestore {
  match /databases/{database}/documents {

    match /{username}/{info} {
      allow read: if signedIn();
      allow write: if isOwner(username);
    }

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

    function isOwner(userId) {
      return request.auth.uid == userId;
    }    
  }
} 

为每个用户收集可能不是一个好主意。请考虑使用每个用户使用UID的文档,然后根据需要使用子集合。唯一的问题是,我正在使用我的应用程序的颤动,我无法理解如何在颤动中访问子集合。.为每个用户收集可能不是一个好主意。请考虑使用每个用户使用UID的文档,然后根据需要使用子集合。唯一的问题是,我正在使用我的应用程序的颤动,我无法理解如何在颤动中访问子集合。。问题是,我在运行时创建了其他集合,这些集合不存储用户信息,而是存储其他信息。我想对这些集合应用不同的规则,但这样做不允许我这样做。然后你应该为这些集合添加单独的规则。问题是,我在运行时创建了其他集合,这些集合不存储用户信息,而是存储其他信息。我想对这些集合应用不同的规则,但这样做不允许我这样做。那么您应该为这些集合添加单独的规则。