2016-09-21 62 views
0

本来共享数据,我有以下设置:实时值听众在火力地堡

folder:{ 
uid1:{ 
    f1:{} 
    f2:{} 
} 
} 

,我能够通过收听该uid的值:

ref('/folder/uid').on('value', functon .... 

的安全规则可以简单地这样的:

"folders": { 
    "$uid": { 
    ".read": "auth != null && auth.uid == $uid", 
    ".write": "auth != null && auth.uid == $uid" 
    } 
}, 

但现在我要做的文件夹共享和规划做了如下:

user:{ 
uid1:{ 
    folderAccessRight:{ 
    read: {fid1:true} 
    write: {fid1:true} 
    } 
} 
} 

folder:{ 
fid1:{} 
fid2:{} 
} 

安全规则可以设置为检查$ FID用户的folderAccessRight JSON存在。但是,由于安全规则不能作为过滤器,我不能再听顶层文件夹ref('/ folder')。

如果我在不同的文件夹和用户添加一个单独的值听者具有N个文件夹,我需要Ñ听众

问题:具有多个监听

  • 就会损害性能?
  • 有没有更好的办法来组织数据&实时收听数据?
+0

我开始写一个答案(我现在把它留作存根),然后意识到我不太了解你的数据模型。你可以展示一个操作,你在执行时遇到问题吗? –

+1

只要你保持合理的数字,拥有多个听众并不是问题。什么是合理的取决于你的应用程序,但一般来说:只听取屏幕上显示的数据。另见http://stackoverflow.com/q/37635733/,http://stackoverflow.com/q/24558317/ –

+0

@FrankvanPuffelen我还没有开始转换,但我的代码仍然在做原始的东西:在ref'folder/uid1',我只是在探索如何在不同的用户之间共享数据。谢谢您的回答。 – nlgn

回答

0

利用您当前的数据结构,您可以安全访问文件夹。每个用户现在只能访问他们拥有的或他们已被授予访问权限的文件夹。

问题似乎是您无法列表用户有权访问的文件夹。

像往常一样,当使用Firebase(以及大多数其他NoSQL存储系统)时,解决方案是将您需要的数据添加到模型中。在你的情况下,这意味着你为每个用户添加一个文件夹列表: