非用户数据的Firebase实时数据库安全规则

时间:2018-07-30 19:37:55

标签: firebase ionic-framework firebase-realtime-database firebase-security firebase-security-rules

因此,我有一个应用程序,用户可以在其中订购蛋糕并进行其他个人资料管理,规则如下所示:

> {   "if": {
>     "field": "type",
>     "equals": "microsoft.insights/activityLogAlerts"   },   "then": {
>     "effect": "auditIfNotExists",
>     "details": {
>       "type": "Microsoft.Insights/alertRules",
>       "name": "microsoft.network/networksecuritygroups/securityrules/delete",
>       "existenceCondition": {
>         "field": "Microsoft.Insights/alertRules/isEnabled",
>         "equals": "true"
>       }
>     }   } }

简单来说,它们意味着任何人都可以读取cakes节点(但没有人可以写入)。经过身份验证的用户可以查看或写入其on节点。

到目前为止,这很好。

现在,我的要求是:当某人通过该应用程序下订单时,我需要将其存储到顶级节点中的firebase db中(让我们说定购)。问题是将在订单节点上放置哪种安全性?

在功能定义中:应用程序应该能够在用户签出时创建新订单,除卖方以外的任何人都不能读取这些订单,只有卖方应具有对订单的更新访问权限。

1 个答案:

答案 0 :(得分:1)

如果您希望每个人都可以写订单,而没有人可以阅读,则规则只是cakes的规则的反面:

"rules": {
  "orders" : { 
    ".read": false,
    "$orderId": {
      ".write": true
    }
  },

任何人都可以在/orders下推送新数据。只要您使用push()来生成新密钥,就可以确保它们永不冲突。

使用这些规则,只有系统级管理员才能读取数据。也就是说:您可以在Firebase控制台中阅读它,或者其他人使用Admin SDK可以阅读它。

您可能希望打开它以阅读更多内容,例如通过具有应用程序级管理员的概念。假设您的UID为uidOfVik,则可以对数据库中的管理员列表进行建模:

admins: {
  uidOfVik: true
}

现在您只能通过以下方式允许管理员读取订单:

"rules": {
  "orders" : { 
    ".read": "root.child('admins').child(auth.uid).exists()",
    "$orderId": {
      ".write": true
    }
  },