【问题标题】:Why firebase rules are denying when tried to push data?为什么尝试推送数据时firebase规则会拒绝?
【发布时间】:2019-10-25 18:59:30
【问题描述】:

大家好,我有这样的收藏

organization : [
   - id : auto generated
   - users: 
      [0]
      - uid: user1
      - userName: testUser

]

我正在使用 Angular 并尝试将新的用户对象推送到用户数组,但权限被拒绝。我的帐户在我登录时应标记为已通过,并且还具有在此集合上创建、更新、删除的权限。

这是我在 Angular 应用中写的内容

 AddToOrganization(userData, organization){
    firebase.firestore().collection("organizations").doc(organization.id).set(
    {users: [userData]},
    {merge: true}
  );
  }

这是我的 Firebase 规则

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    // Function
    function getRole(){
        return get(/database/$(database)/documents/users/$(request.auth.uid)).data;
     }

    function isSignedIn(){
       return request.auth != null;
    }
    function isAdmin(){
    return getRole().roles.keys().hasAny(['admin']) == true;
    }

    // organizations documents
    match /organizations/{organization}{
        allow read;
         allow create,update: if isSignedIn() && request.resoure.data.roles.keys().hasAny(['admin','editor']) == true;
        allow delete: if isSignedIn() && isAdmin() == true;

    }

}

我也尝试在模拟器上运行,但它只触发到文档级别,我想要的是将数据推送到该文档内的数组。

【问题讨论】:

  • 您的规则仅允许修改“组织”中的文档,前提是正在编写的文档有一个名为“角色”的字段,该字段必须包含“管理员”或“编辑”。跨度>

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


【解决方案1】:

您可以尝试使用递归通配符语法{organization=**} 来允许访问任意深度的层次结构。

请参阅安全规则主题下的递归通配符this section

希望有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2020-10-16
    • 2021-05-25
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多