首页 > 解决方案 > Firestore 规则嵌套的“获取”函数

问题描述

我已经启动了一个 Cloud Firestore 数据库并设置了两个集合:

拥有文档数据对象的 用户{ userRole: string, userPermissions: Array<string> }

具有文档数据对象的 角色{ rolePermissions: Array<string> }

我添加了以下规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userID} {
        //User Profiles
      allow read: if isUserValid();
      allow write: if isUserValid();
    }
    
    match /roles/{roleID} {
        //User Roles
      allow read: if true;
      allow write: if isUserValid() && (hasUserPermission('ADMIN.ROLES') || hasRolePermission('ADMIN.ROLES'));
    }

    function isExist() {
      return exists(/databases/$(database)/documents/users/$(request.auth.uid));
    }
  
    function isUserValid() {
      return isExist() &&
      (get(/databases/$(database)/documents/users/$(request.auth.uid)).data.userActive  == true);
    }
    
    function hasUserPermission(permission) {
      let queryPermissions = get(/databases/$(database)/documents/users/$(request.auth.uid)).data.userPermissions;
      return permission in queryPermissions;
    }
    
    function hasRolePermission(permission) {
      let queryRole = get(/databases/$(database)/documents/users/$(request.auth.uid)).data.userRole;
      let queryPermissions = get(/databases/$(database)/documents/roles/$(queryRole)).data.rolePermissions;
      return permission in queryPermissions;
    }
  }
}

当我测试规则时会发生什么:

为什么不起作用?

标签: javascriptfirebasegoogle-cloud-firestorefirebase-security

解决方案


推荐阅读