Firestore 文档 RBAC- FirebaseError:权限缺失或不足

时间:2021-05-29 11:21:43

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

我正在尝试根据用户在文档中的“角色”以及他们是否已登录来限制对 collection 的访问。

只需检查他们是否已登录即可:

rules_version = '2';

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

service cloud.firestore {
  match /databases/{database}/documents {
    match /workspaces/{workspace} {
      allow read: if isSignedIn();
    }
  }
}

但我想让它更细化一点,I'm following this Google guide。当我配置它时,我的前端客户端错误与 FirebaseError: Missing or insufficient permissions 完全相同。但是,在 Firebase 门户中测试规则有效(?)。

rules_version = '2';

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

function getRole(rsc) {
  return rsc.data.access[request.auth.uid];
}

function isOneOfRoles(rsc, array) {
  return isSignedIn() && (getRole(rsc) in array);
}

service cloud.firestore {
  match /databases/{database}/documents {
    match /workspaces/{workspace} {
      allow read: if isOneOfRoles(resource, ["owner", "viewer"]);
    }
  }
}

如前所述,通过 Firebase 测试规则有效,但是从我的前端应用程序查询时失败。

// VueJS
let workspace = []

async fetchWorkspaces() {
    const db = firebase.firestore();
    await db.collection('workspaces').get().then(response => {
        response.forEach(snapshot => {
            this.workspaces.push(snapshot.data());
        })
    })
}

数据库文件

enter image description here

我还尝试将每个用户的 RBAC 作为文档存储在子集合中并使用以下规则

allow read: if isSignedIn() && exists(/databases/$(database)/documents/workspaces/$(workspace)/users/$(request.auth.uid));

还是不行。我似乎只能授予广泛的访问权限(已登录)

0 个答案:

没有答案