【问题标题】:Allow access to Firebase Firestore depending on user permissions根据用户权限允许访问 Firebase Firestore
【发布时间】:2021-06-24 19:02:16
【问题描述】:

我想构建一个 iOS 应用程序,其中用户拥有不同的权限来访问文档。当他是管理员时,如何授予用户读/写访问权限,仅在他是查看者时读取,而没有使用 Firestore 规则访问文档的权限?每个用户都可以创建新文档。

我的 Firebase 规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

我如何添加每个文档的管理员和查看者

当用户的电子邮件(我使用 Firebase Auth)在列表中时,他是管理员或查看者。

我是一名 iOS 开发人员,因此没有使用 Java Script 的经验。

【问题讨论】:

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


    【解决方案1】:

    好的,我是 Android 开发人员,但我已经解决了你的问题你应该在你的应用程序中写一个声明来检查一个帐户是否是管理员(示例){用户输入他的电子邮件,现在我们会检查他的帐户在管理员或查看器中找到,所以我们将使用代码(这只是示例代码) Create button invisible and enabled=false FireBase.child("Admins/"+inputuser).addValuelistener.(new AddValueListener....... if(snapshot.getValue.toString!=null){ the user is admin button=visble and enabled=true }else{ the user is viewer }我希望你能理解我

    【讨论】:

    • 是的,对于不那么私密的信息,这将是一个可能的解决方案。出于安全原因,我需要检查用户是否已经在服务器端是管理员/查看者。
    【解决方案2】:

    我研究了一下,想出了一个解决方案:

    service cloud.firestore {
      match /databases/{database}/documents {
      
        match /organizations/{organization} {
          allow create: if allowCreate();
          allow update, delete: if allowWrite();
          allow read: if allowRead();
        }
      }
      
      function allowCreate () {
        return request.auth != null;
      }
      
      function allowRead() {
        return resource.data.viewers.hasAll([request.auth.token.email]) || 
            resource.data.admins.hasAll([request.auth.token.email]);
      }
      
      function allowWrite() {
        return resource.data.admins.hasAll([request.auth.token.email])
      }
    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 2019-06-03
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      相关资源
      最近更新 更多