правила firebase, основанные на утверждениях: как сослаться на некоторый родительский уровень? - PullRequest
0 голосов
/ 05 июня 2018

При определении правил в Firebase, можно ли ссылаться на более высокие уровни в иерархии, например, так:

"enterprises": {
  "$enterprise_id": {
    "meetings": {
      "$meeting_id": {
        ".read": "$meeting_id === auth.meeting_id && $enterprise_id == auth.enterprise_id",
          "users": {
            "$user_id": {
              ".read": "$user_id === auth.uid && $meeting_id === auth.meeting_id && $enterprise_id === auth.enterprise_id"
            }
          }
        }
      }
    }
}

Что означало бы, что для чтения узла $ meeting_id,У пользователя должен быть токен с обоими утверждениями о совпадении meeting_id и enterprise_id.

На самом деле, похоже, он не работает, но как можно этого добиться?

Может быть, что-то вроде: "data.parent().parent().val() === auth.enterprise_id"?

1 Ответ

0 голосов
/ 05 июня 2018

После некоторых поисков в имитаторе правил firebase я понял несколько вещей:

1) способ ссылаться на утверждения токена - это auth.claims.meeting_id

2) идентификаторы внутримои требования были большими целыми числами, это не работает, я преобразовал их в строки.

"claims": {
    "meeting_id": "5150900591001600",
    "enterprise_id": "5719825666015232"
  }

После этого правило, относящееся к идентификаторам более высокого уровня, например

".read": "$meeting_id === auth.claims.meeting_id && $enterprise_id === auth.claims.enterprise_id"

отлично работает.

Самая важная рекомендация, если у вас возникают подобные проблемы, - использовать симулятор правил, вставлять содержимое токена и пытаться «по одному шагу за раз», как говорит @ andréKool.

...