首页 > 解决方案 > 具有自定义功能错误的 Firestore 规则

问题描述

我正在尝试创建一个规则以允许我的 firestore 数据库中的某些功能(我从 3 个月前开始使用 firebase,我在这方面真的很陌生)。主要思想是找到我存储在用户文档中的用户配置文件的_key。然后,使用我之前找到的 id 搜索 user-profiles 文档中允许的所有权限。如果我找到了权限,我就可以访问该功能

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

    function getPermisos(idPermiso){
    return get(/databases/{database}/documents/user-profiles/$(idPermiso)).data;
    }

    function getUserType(){
    return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.profile._key ;
    }


    match /proyectos/{document=**}{
    allow list,get: if getPermisos(getUserType()).acessList.proyectos==true;
    }


  }
}

这是正确的方法吗?提前感谢您的帮助

标签: firebasegoogle-cloud-firestorefirebase-security

解决方案


您不查询可访问性规则。您可以定义一个集合,accessLevels其中每个文档代表您的各种访问类型,例如“admins”、“groupone”、“grouptwo”等。请参阅文档

使用自定义声明和安全规则控制访问

Firebase Admin SDK 支持在用户帐户上定义自定义属性。这提供了在 Firebase 应用中实施各种访问控制策略的能力,包括基于角色的访问控制。这些自定义属性可以为用户提供不同级别的访问权限(角色),这些权限在应用程序的安全规则中强制执行。

可以为以下常见情况定义用户角色:

  • 授予用户访问数据和资源的管理权限。
  • 定义用户所属的不同组。
  • 提供多级访问:
  • 区分付费/未付费用户。
  • 将版主与普通用户区分开来。
  • 教师/学生申请等
  • 为用户添加附加标识符。例如,Firebase 用户可以映射到另一个系统中的不同 UID。

推荐阅读