【问题标题】:firebase realtime database security rules for non user data非用户数据的firebase实时数据库安全规则
【发布时间】:2019-01-07 03:03:06
【问题描述】:

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

{
  "rules": {
    "cakes" : { 
      ".read": true,
      ".write": false
    },
    "users": {
      "$user_id": {
        ".read": "auth != null && $user_id === auth.uid",
        ".write": "auth != null && $user_id === auth.uid"
      }
    }
  }
}

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

到目前为止,这很好。

现在,我的要求是:当有人通过应用程序下订单时,我需要将其存储到顶级节点中的 firebase db(假设它是订单)。问题是订单节点上会设置什么样的安全性?

在功能定义中:应用程序应该能够在用户结账时创建新订单,除了卖家之外没有人应该能够阅读这些订单,只有卖家应该能够更新订单。

【问题讨论】:

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


    【解决方案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
        }
      },
    

    【讨论】:

    • 什么是并且只要您使用 push() 生成新密钥,就可以保证它们永远不会冲突。 ?你为订单建模的方式写规则那么它是一种赤裸裸的。有人不能只使用 REST 客户端并进行后期调用,因为这就像一个赤裸裸的规则或根本没有安全性?
    • "write": true 是您给出的要求中最好的。如果您的实际要求更严格,可以改为建模。
    猜你喜欢
    • 2020-01-15
    • 2020-08-08
    • 2020-12-28
    • 2021-10-26
    • 2021-12-05
    • 2021-02-13
    • 2018-08-27
    • 2021-02-11
    相关资源
    最近更新 更多