security - Firebase 数据库安全规则

标签 security firebase firebase-realtime-database

我真的很难应对 Firebase 数据库安全规则。

我正在开发一个简单的应用程序,用户可以在其中维护一个记录列表,任何人都可以读取该列表,但只有创建该记录的用户可以编辑或删除。

只需将其视为待办事项应用程序,经过身份验证的用户可以在其中管理任务列表。用户可以互相读取任务列表,但只有创建该任务的用户才能删除或编辑该任务。

我尝试了不同的选项,但未能提出正确的安全策略。

是否有任何我可以遵循的示例或关于如何构建数据以简化安全策略的任何建议?

安全规则示例

我尝试过这样的事情 -

"rules": {
"records" : {
  ".read" : true,
    "$user_id": {
         ".write": "auth.uid === $user_id"
        }
    }
  }
}

这样任何人都可以读取记录,但只有具有匹配 user_id 的登录用户才能添加、编辑或删除记录。

但是,当我在模拟器中尝试写入操作时,我总是收到写入拒绝错误。我在请求正文/数据中将身份验证 uid 作为“user_id”传递。

我也尝试过

{
 "rules": {
 "records" : {
   ".read" : true,
    ".write": "auth.uid === data.child('user_id').val()"
     }
   }
}

最佳答案

我在文档中找到了这一点。节点用户有以 auth.uid 作为 key 存储的子节点。因此,在写入该条目之前,您基本上将用户 uid 与 key 进行比较:

{
  "rules": {
    "users": {
      "$user_id": {
        // grants write access to the owner of this user account
        // whose uid must exactly match the key ($user_id)
        ".write": "$user_id === auth.uid",
        ".read": true
      }
    }
  }
}

https://www.firebase.com/docs/security/guide/user-security.html

关于security - Firebase 数据库安全规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37321308/

相关文章:

security - 如何在 tomcat 中禁用 SSLv3?

java - Java 中的密码安全 - 将 char[] 转换为 String

php - Firebase 如何发送主题通知

firebase - Kotlin - 可序列化类中的初始化 block 只能读取默认属性值

javascript - 如何在 Cloud Functions for Firebase 中使用动态引用触发器

php - Cakephp - 如何加密然后解密正在存储和从数据库检索的数据

java - 算法 HmacPBESHA256 不可用

javascript - 数据库写入时未触发云函数

java - 如何从所有用户的 FirebaseRecyclerAdapter 中隐藏当前用户?

android - 将 firebase 依赖项添加到 Android 应用程序时应用脚本 build.gradle 错误