Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase中有多个管理员-可能吗?_Javascript_Firebase - Fatal编程技术网

Javascript Firebase中有多个管理员-可能吗?

Javascript Firebase中有多个管理员-可能吗?,javascript,firebase,Javascript,Firebase,我正在尝试使用Firebase作为数据库服务创建一个仅客户端的应用程序,但在定义允许多个'admin'用户访问某些数据的安全规则时遇到了一些困难。 我的数据架构如下所示: { admins: { simpleLogin:1 : true, facebook:1234 : true }, myData: { simpleLogin:1 : { ..... }, google:1234 : { ..... },


我正在尝试使用Firebase作为数据库服务创建一个仅客户端的应用程序,但在定义允许多个
'admin'
用户访问某些数据的安全规则时遇到了一些困难。

我的数据架构如下所示:

{
  admins: {
    simpleLogin:1 : true,
    facebook:1234 : true
  },
  myData: {
    simpleLogin:1 : {
      .....
    },
    google:1234 : {
      .....
    },
    facebook:1234 : {
      .....
    }
  }
}
我试图允许登录用户写入其在“data”对象中的位置(我使用
ref.child('myData').child(auth.uid).set(…)
和防止用户访问其他用户数据。此外,在
'admins'
数据中定义其
uid
的用户应该能够读取/写入所有
'myData'
对象。

我的安全JSON定义如下:

{
 "rules": {    
   "admins": {      
     ".write": false,
     ".read": true
   },
   "myData": {      
      "$user_id": {
         ".read": "$user_id === auth.uid ||  
              root.child('admins').hasChild(auth.uid)",
         ".write": "$user_id === auth.uid || 
              root.child('admins').hasChild(auth.uid)"
       }
   }
 }
  • 我正在使用本地节点服务将用户手动添加到
    “管理员”
    ,每当我想将用户设置为管理员时,我都会运行该服务。

当然,这不起作用,因为
'myData'
没有读/写权限的明确定义-所以当我试图读取
ref.child('myData')。一次('value',function(){..})
uid
'admins'
中的用户一起时-我无法这样做。

我正在尝试运行以下查询,并向用户获取其uid位于
管理员中,并且获取
权限被拒绝

ref.child('myData').once('value', function(snapshot)     
  {console.log(snapshot.val())}, function() {console.log(arguments)}))

甚至可以做我想做的事情吗?

每个用户都应该能够阅读
管理员节点

"rules": {    
   "admins": {      
     ".write": false,
     ".read": true
   },

如果您担心:允许每个人读取此节点没有风险。

没有任何东西阻止您直接向
myData
添加规则。这使管理员可以直接访问
myData
(以及其中的所有节点)。如果用户不是管理员,他们只能访问自己的节点

"myData": {
   ".read": "root.child('admins').hasChild(auth.uid)",
   ".write": "root.child('admins').hasChild(auth.uid)",
   "$user_id": {
      ".read": "$user_id === auth.uid",
      ".write": "$user_id === auth.uid"
    }
}
关于Firebase:需要了解的关键部分是

子规则只能附加特权授予 父节点已声明


基本上,如果您是管理员,那么您可以在myData级别(及其子级)进行读写操作没有什么可以撤销这一点。如果您不是管理员,您仍然可以获得较低级别的访问权限,如上面的示例所示。

您的管理员是否需要访问
myData
,或者他们访问
myData/$user\u id
就足够了?请回答下面的问题。但如果这还不能回答问题,请编辑您的问题,为您正在进行的查询添加代码尝试运行。嗨,它没有帮助:(我正在尝试运行以下查询:ref.child('myData')。once('value',function(snapshot){console.log(snapshot.val())},function(){console.log(arguments)}))如果用户的uid在管理员列表中,并且“权限被拒绝”,那么我就不能授予“.read”:对myData节点的真正权限,并将写限制留给每个子uid-这将允许每个人都可以读取,但只能修改他们的节点-但我认为这不是一个好模式…嗨,Anid!这是有效的,但是-我无法理解为什么。你能解释一下吗?根据文档(),如果我将“myData”的读取权限仅限于管理员-非管理员如何读取内部节点?这与级联示例中的示例不一样吗?我缺少什么?很高兴提供帮助。我编辑了答案,并做了简要解释。