Firebase 火基安全规则

Firebase 火基安全规则,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我在firebase中有以下格式的数据- "requests" : { "-KpPjt5jQZHBalQRxKSK" : { "email" : "pariksheet@agsft.com", "itemId" : "-KmazkKp5wavdHOczlDS", "quantity" : 1, "status" : "new" }, "-KpZsw3KHE9oD1CIFQ4R" : { "email" : "

我在firebase中有以下格式的数据-

  "requests" : {
    "-KpPjt5jQZHBalQRxKSK" : {
      "email" : "pariksheet@agsft.com",
      "itemId" : "-KmazkKp5wavdHOczlDS",
      "quantity" : 1,
      "status" : "new"
    },
    "-KpZsw3KHE9oD1CIFQ4R" : {
      "email" : "pbarapatre@gmail.com",
      "itemId" : "-Kmb-ZXfao7VdfenhfYj",
      "quantity" : 1,
      "status" : "new"
    }
  }
每个请求都包含

"email" <- user's email id who has initiated the request.
"itemId" <- id of requested item
"quantity" <- item quantity
"status" <- "new" | "approved" | decline.
我维护了单独的节点角色,这些角色 { “uid”:“角色” }

我正在使用AngularFire2在我的应用程序中查询Firebase

检索具有给定状态的请求的示例代码如下

const queryList$ = this.db.list('/requests', {
    query: {
        orderByChild: 'status',
        equalTo: status
    }
})
谢谢
巴黎

我建议您进行以下更改:

在数据库的根目录中创建一个新对象
admins

"admins": {
    "<ADMIN_1_UID>": "true",
    "<ADMIN_2_UID>": "true"
}

我建议您进行以下更改:

在数据库的根目录中创建一个新对象
admins

"admins": {
    "<ADMIN_1_UID>": "true",
    "<ADMIN_2_UID>": "true"
}

这在很大程度上取决于如何实现管理用户的概念。请编辑您的问题以包含两个代码段:1)应允许的操作的最小代码,2)应不允许的操作的最小代码。如果能看到您现有的(最低限度的)请求安全规则也会很好。谢谢。我已经添加了我现有的安全规则。这在很大程度上取决于你如何实现管理员用户的概念。请编辑您的问题以包含两个代码段:1)应允许的操作的最小代码,2)应不允许的操作的最小代码。如果能看到您现有的(最低限度的)请求安全规则也会很好。谢谢。我已经添加了我现有的安全规则。我已经根据你的建议更新了原始帖子中的安全规则。现在管理员可以写,但读取不起作用。管理员和请求所有者都被拒绝了权限错误。有什么想法吗?如果我尝试读取单个请求,即/requests/req id,安全规则会起作用,但如果我尝试获取/requests,则安全规则不会起作用。在这种情况下,如果我是管理员用户,如何获取所有请求;如果我是普通用户,如何获取请求子集(自己的请求)。非常感谢您的帮助。只想提醒您,如果您想由非管理员在
/requests
执行搜索查询,它将授予拒绝权限,因为我们只授予访问特定请求的权限,搜索查询需要整个父级(
requests
)访问权限。谢谢。在这种情况下,什么是搜索查询,或者您想到的任何替代方法。再次感谢您,您可以只授予任何身份验证用户对整个请求的读取权限,而只授予管理员对整个请求的写入权限。或者你可以改变整个数据库结构。这取决于你的需要。我已经根据你的建议更新了原始帖子中的安全规则。现在管理员可以写,但读取不工作。管理员和请求所有者都被拒绝了权限错误。有什么想法吗?如果我尝试读取单个请求,即/requests/req id,安全规则会起作用,但如果我尝试获取/requests,则安全规则不会起作用。在这种情况下,如果我是管理员用户,如何获取所有请求;如果我是普通用户,如何获取请求子集(自己的请求)。非常感谢您的帮助。只想提醒您,如果您想由非管理员在
/requests
执行搜索查询,它将授予拒绝权限,因为我们只授予访问特定请求的权限,搜索查询需要整个父级(
requests
)访问权限。谢谢。在这种情况下,什么是搜索查询,或者您想到的任何替代方法。再次感谢您,您可以只授予任何身份验证用户对整个请求的读取权限,而只授予管理员对整个请求的写入权限。或者你可以改变整个数据库结构。这取决于你的需要。
"rules": {
    "admins": {
        ".read": false,
        ".write": false /*This ensures that only from firebase console you can add data to this object*/
    },
    "requests": {
        ".read": "root.child('admins').child(auth.uid).val()",
        ".write": "root.child('admins').child(auth.uid).val()", /*Only Admins can read/update all requests*/
        "$rId": {
            ".read": "data.child('email').val() == auth.email"/*Request owner can read only the particular request*/
        }
    }
}