热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Firebase-在没有安全节点的情况下获取数据?-Firebase-FetchDataWithoutSecureNodes?

UsingFirebase,howcanIfetchanode,ofwhichsomechildrenaresecure?使用Firebase,我如何获取一些节点,其中一些

Using Firebase, how can I fetch a node, of which some children are secure?

使用Firebase,我如何获取一些节点,其中一些孩子是安全的?

For example...

例如...

Data structure:

数据结构:

root: {
    clients: {
        c1: { 
            data: {
                name: "person1"
            }
            permissions: {
                clientId: "abc"
                trainerId: "123"
            }
        }
        c2: { 
            data: {
                name: "person2"
            }
            permissions: {
                clientId: "def"
                trainerId: "123"
            }
        }
    }
}

Security:

安全:

"clients": {
          "$clientKey": {
                "data": {
                    ".read": "data.parent().child('permissions').child('clientId').val() == auth.token.name || data.parent().child('permissions').child('trainerId').val() == auth.uid",
                    ".write": "data.parent().child('permissions').child('trainerId').val() == auth.uid"
              }
          }
        }

So what I am trying to achieve is the following; A client can read their own data. A trainer can read and write any of their clients. If your id is in the permissions then you can read/write as specified.

所以我想要实现的目标如下:客户端可以读取自己的数据。培训师可以读写任何客户。如果您的id在权限中,那么您可以按指定读/写。

However, my issue now becomes, if as a trainer I want to see a list of all clients I have permission to read.

但是,我现在的问题是,如果作为培训师,我想查看我有权阅读的所有客户的列表。

How can I fetch the clients? Trying to just do a data read/fetch on clients fails.

我该如何获取客户端?试图在客户端上执行数据读取/获取失败。

1 个解决方案

#1


1  

I would structure your db like so:

我会这样构建你的数据库:

root: {
  clients: {
    abc: { 
        data: {
            name: "person1"
        },
        trainer: {
            123: true
        }
    },
    def: { 
        data: {
            name: "person2"
        },
        trainer: {
            123: true
        }
    }
  },
  trainers: {
    123: {
      clients: {
        abc: true,
        def: true
      }
    }
  }
}

With the following rules. I think it would be easier to just enforce the read and write rules on the client_id object, like so:

遵守以下规则。我认为在client_id对象上强制执行读写规则会更容易,如下所示:

{
  "rules": {
    "clients" : {
      "$client_id" : {
        ".read": "auth.uid === $client_id || data.child('trainer/'+auth.uid).exists()",
        ".write" : "data.child('trainer/'+auth.uid).exists()"
      }
    },
    "trainers": {
      "$trainer_id": {
        ".read": "auth.uid === $trainer_id || data.child('clients/'+auth.uid).exists()",
        ".write": "auth.uid === $trainer_id"
      }
    }
  }
}

To get a trainer's clients you'd first fetch the trainer's node and then fetch the client's info for each client under the client's node.

要获得培训师的客户,您首先要获取培训师的节点,然后获取客户端节点下每个客户端的客户端信息。

Fetching the info of all clients under a trainer (I don't know Obj C but I think this should work.)

获取培训师下所有客户的信息(我不知道Obj C,但我认为这应该有用。)

[[self.trainersRef child:[NSString stringWithFormat:@"%@/clients", userId]] observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
  for ( FDataSnapshot *child in snapshot.children) {
    [[self.clientsRef child:[NSString stringWithFormat:@"%@/data", child.key]] observerEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull dataSnapshot) {
      // Client info available here.
    }];
  }
}];

推荐阅读
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • Iamtryingtocreateanarrayofstructinstanceslikethis:我试图创建一个这样的struct实例数组:letinstallers: ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • WPF之Binding初探
      初学wpf,经常被Binding搞晕,以下记录写Binding的基础。首先,盗用张图。这图形象的说明了Binding的机理。对于Binding,意思是数据绑定,基本用法是:1、 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
author-avatar
安宁日月_860
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有