Понимание основных правил безопасности Firebase в Firebase

#firebase-realtime-database #firebase-security

#firebase-база данных в реальном времени #firebase-безопасность

Вопрос:

Я использую Firebase Auth и прочитал много документации по правилам безопасности, пользовательским заявлениям, облачным функциям, но я действительно запутался.

Рассмотрим следующую структуру данных

 {
    "company": {
        "idCompany1": {"data": "Restricted to Company1s users"},
        "idCompany2": {"data": "Restricted to Company2s users"}
    },
    "users": {
        "idUser1": {
            "companies": {
                "idCompany1": true
            }
        },
        "idUser2": {
            "companies": {
                "idCompany1": true,
                "idCompany2": true
            }
        }
    }
}
  

Я хотел бы реализовать простое правило в консоли Firebase (правило безопасности Firebase) без изменения моей структуры данных.

Правило, которое я хотел бы настроить: пользователь может читать или записывать информацию только в компаниях, которым она принадлежит (users / $ idUser /companies / $ idCompany === true на пути company /$ idCompany)

На данный момент я только настроил:

 {
  "rules": {
    "company" : {
      ".read": "auth != null",
      ".write": "auth != null",
        }
      }
    },
    "users" : {
      "$user_id" : {
        ".read": "auth != null",
        ".write": "auth.uid === $user_id"           
  }
}
  

Как я могу настроить это правило безопасности Firebase в консоли Firebase?

Ответ №1:

Похоже, вы ищете:

 {
  "rules": {
    "company" : {
      "$companyid": {
        ".read": "root.child('users').child(auth.uid).child('companies').child($companyid).val() === true"
      }
    }
  }
}
  

Это позволит пользователю читать /company/$companyid для любой компании, где она указана в их профиле.

Примечание: вы не сможете прочитать /company само по себе, поскольку правила не являются фильтрами.

Комментарии:

1. Да, я так думаю. Я протестирую это.