Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase安全规则-尝试从树节点删除数据时权限被拒绝_Firebase_Firebase Security - Fatal编程技术网

Firebase安全规则-尝试从树节点删除数据时权限被拒绝

Firebase安全规则-尝试从树节点删除数据时权限被拒绝,firebase,firebase-security,Firebase,Firebase Security,我一直在为一些firebase安全规则而挣扎。我可以在节点上添加/更新数据,但无法删除它。以下是我的节点的规则: "auditions": { ".read": "auth !== null", "$auditionId": { "_geoloc": { ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.pare

我一直在为一些firebase安全规则而挣扎。我可以在节点上添加/更新数据,但无法删除它。以下是我的节点的规则:

"auditions": {
        ".read": "auth !== null",
        "$auditionId": {
         "_geoloc": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "band_id": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "creator_id": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "date_created": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "date_last_updated": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "genres": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "instruments": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "is_deleted": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "objectID": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "type": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "videos": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "audition_id": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "is_new": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "message": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "status": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "user_id": {
           ".write": "auth !== null && (!data.exists() || !newData.exists() || (data.parent().hasChild('user_id') && data.parent().child('user_id').val() === auth.uid) || (newData.parent().hasChild('user_id') && newData.parent().child('user_id').val() === auth.uid) || (data.parent().hasChild('creator_id') && data.parent().child('creator_id').val() === auth.uid) || (newData.parent().hasChild('creator_id') && newData.parent().child('creator_id').val() === auth.uid))"
         },
         "applications": {
           ".write": "auth !== null"
         }
        }
      }
我这样设置是因为$auditionId的所有子节点上都需要一些更复杂的规则,除了应用程序之外

我在这里指定$auditionId的各个子节点是否有错误,当我删除应用程序中的数据时,会出现权限被拒绝的错误

我想限制对试镜创建者的写入/更新/删除,除了更新/auditions/$applicationId/applications时

这听起来像:

auditions": {
    ".read": "auth !== null",
    "$auditionId": {
        ".write": "auth !== null && (
          (data.exists() && data.child('user_id').val === auth.uid) ||
          (!data.exists() && newData.child('user_id').val() === auth.uid)
        )",
        "applications": {
            ".write": true
        }
    }
}

请尝试使用{rules:{.read:auth!=null、.write:auth!=null}}是的,但我需要比这更精细:/如果您试图删除/auditions/$auditionId,那么使用这些规则确实会失败,因为用户在该节点上没有权限。@FrankvanPuffelen这是有道理的。我想知道我应该在那里吃什么?如果我将写入规则设置为auth!==在/auditions/$auditionId节点上为null,这会覆盖所有更深层次的规则吗?是的。我真的不确定你想要通过在较低层次上制定规则来实现什么。现在感觉像是一场灾难。你能用一句话描述一下这些规则的目的吗?正确的实现通常更容易从中发现。我爱你。那太完美了。还解决了我的许多其他问题