Firebase中客户端之间的共享

珍妮·林·夏皮罗(Jennie Lyn Shapiro)

我想知道是否可以通过以下方式实现Firebase安全性:允许我的应用程序的每个用户完全访问自己位置的数据,同时使该用户能够自行启用或禁用来自以下位置的访问类型其他用户自己的数据?或者基本上,是否可以通过严格执行这种方式在我的应用程序用户之间实现简单的共享,Dropbox或Google云端硬盘风格?

加藤

由于Firebase安全规则允许您引用Firebase中的数据,因此您可以将安全规则基于可以为其创建数据的任何内容。所以是的,您可以允许用户以几乎任何可以计划的方式共享他们自己的数据。

为了创建一个基于Dropbox想法的简化示例,我可以在数据下创建一个“共享”文件夹,并在其中存储一个访问权限的安全文件夹:

/security/$user_id/$friend/...   // where I put the access rights
/folders/$user_id/shares/...     // where I put the shared files

现在,我可以通过将用户名和他们可以访问的文件夹列表放入Firebase数据中来控制对它的访问:

/security/$user_id/$friend_id = /never/gonna/give/you/up = true

现在在我的安全规则中,我可以这样写:

{
   "security": {
      "$user_id": { // only authenticated user may read/write his rules
         "shares": {
            ".read": "auth.id === $user_id",
            ".write": "auth.id === $user_id"
         }
      }
   }
   "folders": {
      "$user_id": {
         // only authenticated user may read/write his folders
         ".read": "auth.id === $user_id",
         ".write": "auth.id === $user_id",
         "shares": {
            // but my friends can read data in shares
            ".read": "root.child('security/'+$user_id+'/'+auth.id+'/shares').val() === true"
         }
      }
   }
}

请注意,对此的限制(暂时)是安全规则不能递归工作或以任何嵌套方式工作。但是,由于规则是允许的(如果路径的任何父级允许访问,那么它被允许),则可以解决此问题。

您可能需要对子路径的最大数量设置硬限制,并在规则中手动声明它们,如下所示:

// allow sharing up to 3 levels deep
"shares": {
   ".read": "root.child('security/'+$user_id+'/'+auth.id+'/shares').val() === true",
   "$child1": {
      ".read": "root.child('security/'+$user_id+'/'+auth.id+'/shares/'+$child1).val() === true",
      "$child2": {
         ".read": "root.child('security/'+$user_id+'/'+auth.id+'/shares/'+$child1+'/'+$child2).val() === true",
         "$child3": {
            ".read": "root.child('security/'+$user_id+'/'+auth.id+'/shares/'+$child1+'/'+$child2+'/'+$child3).val() === true",
         }
      }
   }
}

不是要看的最漂亮的东西,而是一个不错的临时解决方案,直到Firebase获得一些嵌套功能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Firebase中客户端之间的共享

来自分类Dev

尝试在客户端-服务器程序中的进程之间创建共享内存段

来自分类Dev

在Spring Cloud配置客户端之间共享配置

来自分类Dev

在android客户端和GAE端点之间共享类

来自分类Dev

客户端和服务器之间的共享模型

来自分类Dev

RSA加密2个客户端之间的共享数据

来自分类Dev

客户端和服务器之间的共享模型

来自分类Dev

在android客户端和GAE端点之间共享类

来自分类Dev

客户端之间是否共享ActionCable Channel实例?

来自分类Dev

使用Java和Corba识别对等文件共享中的客户端。并在2个客户端之间建立套接字套接字

来自分类Dev

如何在Firebase中的服务器和客户端之间使时间戳相同?

来自分类Dev

AFHTTPRequestOperationManager属性还是不在共享客户端中?

来自分类Dev

在React中管理共享/单个客户端对象

来自分类Dev

AFHTTPRequestOperationManager属性还是不在共享客户端中?

来自分类Dev

如何在Meteor中的服务器和客户端代码之间共享全局变量

来自分类Dev

如何在Express,React,Webpack,SSR应用程序中的客户端和服务器之间共享常量

来自分类Dev

在多个客户端之间的postgres中实施宽松约束

来自分类Dev

Apollo客户端中的writeQuery和writeData之间的区别?

来自分类Dev

不同网络中客户端之间的WebRTC

来自分类Dev

如何检测客户端停止在Firebase中监听?

来自分类Dev

forEach与客户端中的单个文档Firebase查询?

来自分类Dev

如何检测停止在Firebase中监听的客户端?

来自分类Dev

客户端和服务器流星之间的共享集合

来自分类Dev

在客户端和服务器之间共享TypeScript类

来自分类Dev

如何在NodeJS项目之间共享常见的客户端JavaScript?

来自分类Dev

使用Gradle在Kotlin服务器和客户端项目之间共享代码

来自分类Dev

在JavaScript客户端和Java服务器之间共享Google Analytics(分析)ClientID

来自分类Dev

流星在客户端和服务器之间共享会话数据

来自分类Dev

如何在ipyparallel客户端和远程引擎之间最佳地共享静态数据?

Related 相关文章

  1. 1

    Firebase中客户端之间的共享

  2. 2

    尝试在客户端-服务器程序中的进程之间创建共享内存段

  3. 3

    在Spring Cloud配置客户端之间共享配置

  4. 4

    在android客户端和GAE端点之间共享类

  5. 5

    客户端和服务器之间的共享模型

  6. 6

    RSA加密2个客户端之间的共享数据

  7. 7

    客户端和服务器之间的共享模型

  8. 8

    在android客户端和GAE端点之间共享类

  9. 9

    客户端之间是否共享ActionCable Channel实例?

  10. 10

    使用Java和Corba识别对等文件共享中的客户端。并在2个客户端之间建立套接字套接字

  11. 11

    如何在Firebase中的服务器和客户端之间使时间戳相同?

  12. 12

    AFHTTPRequestOperationManager属性还是不在共享客户端中?

  13. 13

    在React中管理共享/单个客户端对象

  14. 14

    AFHTTPRequestOperationManager属性还是不在共享客户端中?

  15. 15

    如何在Meteor中的服务器和客户端代码之间共享全局变量

  16. 16

    如何在Express,React,Webpack,SSR应用程序中的客户端和服务器之间共享常量

  17. 17

    在多个客户端之间的postgres中实施宽松约束

  18. 18

    Apollo客户端中的writeQuery和writeData之间的区别?

  19. 19

    不同网络中客户端之间的WebRTC

  20. 20

    如何检测客户端停止在Firebase中监听?

  21. 21

    forEach与客户端中的单个文档Firebase查询?

  22. 22

    如何检测停止在Firebase中监听的客户端?

  23. 23

    客户端和服务器流星之间的共享集合

  24. 24

    在客户端和服务器之间共享TypeScript类

  25. 25

    如何在NodeJS项目之间共享常见的客户端JavaScript?

  26. 26

    使用Gradle在Kotlin服务器和客户端项目之间共享代码

  27. 27

    在JavaScript客户端和Java服务器之间共享Google Analytics(分析)ClientID

  28. 28

    流星在客户端和服务器之间共享会话数据

  29. 29

    如何在ipyparallel客户端和远程引擎之间最佳地共享静态数据?

热门标签

归档