Подтвердить что ты не робот

Предоставление доступа к местам Firebase группе пользователей

Я не мог найти его в документах, но есть ли способ определить группу пользователей и использовать эту группу для предоставления доступа к разным адресам, а не для предоставления доступа отдельным пользователям?

С уважением, LT

4b9b3361

Ответ 1

Там нет явной поддержки "групп" в Firebase, потому что вы можете легко представлять их сами. Вот два варианта, в зависимости от вашей ситуации.

Сохранение информации о группе в firebase.

Следующие данные могут быть использованы для представления двух групп ( "альфа" и "бета" ) и 3 частей защищенных данных ( "вещь1", "вещь2" и "вещь3" )

{
  "groups": {
    "alpha": {
      "joe": true,
      "sally": true
    },
    "beta": {
      "joe": true,
      "fred": true
    }
  },
  "data": {
    "thing1": {
      "group": "alpha"
      /* data accessible only by the "alpha" group */
    },
    "thing2": {
      "group": "beta"
      /* data accessible only by the "beta" group */
    },
    "thing3": {
      "group": "alpha"
      /* more data accessible by the "alpha" group */
    }
  }
}

Затем мы можем использовать следующие правила для обеспечения безопасности:

{
  "rules": {
    "data": {
      "$thing": {
        ".read":  "root.child('groups').child(data.child('group').val()).hasChild(auth.id)",
        ".write": "root.child('groups').child(data.child('group').val()).hasChild(auth.id)"
      }
    }
  }
}

Итак, если я аутентифицирован с помощью {id: 'sally'} как моего объекта auth, у меня будет доступ к thing1 и thing3, но не к веществу2.

Сохранение информации о группе в токене аутентификации.

Если вы создаете свои собственные токены auth, и вы знаете, в каких группах пользователь находится в момент их авторизации, вы можете сохранить список групп в маркете auth, который вы создаете. Например, когда вы создаете токен аутентификации для пользователя 'fred', включите "{id: 'fred', groups: {alpha: true, beta: true}}"

И затем вы можете обеспечить членство в группе с помощью:

{
  "rules": {
    "data": {
      "$thing": {
        ".read": "auth[data.child('group').val()] != null",
        ".write": "auth[data.child('group').val()] != null"
      }
    }
  }
}