gpt4 book ai didi

具有多个聊天室的应用的 Firebase 安全规则

转载 作者:行者123 更新时间:2023-12-04 23:03:13 25 4
gpt4 key购买 nike

我无法想象对于一个看起来像这样的应用程序的安全规则会是什么样子:

  • 一个带多个聊天室的火力基地。
  • 主持人通过单独的 PHP 应用程序进行身份验证。
  • 版主只有修改自己聊天室的权限,他们可以读取、写入、更新和删除自己聊天室中的任何内容。
  • 客人通过单独的 PHP 应用程序到达并进行身份验证。
  • guest 具有读写访问权限,但不能删除任何内容。

  • 我现在的问题是:
  • 是否可以配置规则以满足所有这些要求?或者有什么要求是不可能满足的?
  • PHP 服务器在多大程度上必须与 Firebase 通信,以通知 Firebase 用户的存在?
  • 最佳答案

    首先,check out this gist ,这是我前段时间为多个聊天室设计的示例。

  • 是的。这是完全可能的。
  • PHP服务器?你不需要服务器! :)

  • 数据结构基本如下:
    # chats roughly equal "rooms"
    /chats/chat_id/users/...

    # a timestamp of when each participant last viewed the room
    /chats/chat_id/last/...

    # the messages sent
    /chats/chat_id/messages/...

    安全规则是自我记录的。这是用于参照完整性的本地副本。
    {
    "chat": {
    // the list of chats may not be listed (no .read permissions here)

    // a chat conversation
    "$key": {

    // if the chat hasn't been created yet, we allow read so there is a way
    // to check this and create it; if it already exists, then authenticated
    // user (specified by auth.account) must be in $key/users
    ".read": "auth != null && (!data.exists() || data.child('users').hasChild(auth.account))",

    // list of users authorized to participate in chat
    "users": {
    // if the list doesn't exist, anybody can create it
    // if it already exists, only users already in the list may modify it
    ".write": "!data.exists() || data.hasChild(auth.account)",
    "$acc": {
    // for now the value is just a 1, later it could be a read/write/super privilege
    ".validate": "newData.isNumber()"
    }
    },

    // timestamps recording last time each user has read this chat
    "last": {
    "$acc": {
    // may only written by the authenticated user and if user is in $key/users
    ".write": "$acc === auth.account && root.child('chat/'+$key+'/users').hasChild($acc)",
    ".validate": "newData.isNumber()"
    }
    },

    "messages": {
    "$msg": {
    // to write a message, it must have all three fields (usr, ts, and msg)
    // and the person writing must be in $key/users
    ".write": "root.child('chat/'+$key+'/users').hasChild(auth.account)",
    ".validate":"newData.hasChildren(['ts', 'usr', 'msg'])",
    "usr": {
    // may only create messages from myself
    ".validate": "newData.val() === auth.account"
    },
    "msg": {
    ".validate": "newData.isString()"
    },
    "ts": {
    ".validate": "newData.isNumber()"
    }
    }
    }
    }
    }

    }

    主持人通过单独的 PHP 应用程序进行身份验证。
    使用 custom login module为管理员创建 Firebase token 。根据您存储在该 token 中的数据应用安全规则。

    版主只有修改自己聊天室的权限...
    通过简单地扩展上面的用户权限,这应该是不言自明的。

    客人通过单独的 PHP 应用程序到达并进行身份验证。
    使用 custom login module为管理员创建 Firebase token 。根据您存储在该 token 中的数据应用安全规则。

    (或者废弃 PHP 应用程序并使用 Firebase's baked in authentication !)

    guest 具有读写访问权限,但不能删除任何内容。
    在“.write”规则中使用 newData.exists() 或 newData.hasChildren(...) 来防止删除。

    客人不能欺骗其他客人。
    身份验证 token 将阻止这种情况

    关于具有多个聊天室的应用的 Firebase 安全规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983970/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com