firebase-database
Reglas de base de datos en tiempo real de Firebase
Buscar..
Observaciones
Las reglas de la base de datos en tiempo real de Firebase determinan quién tiene acceso de lectura y escritura a su base de datos, cómo se estructuran sus datos y qué índices existen. Estas reglas se encuentran en los servidores Firebase y se aplican automáticamente en todo momento. Cada solicitud de lectura y escritura solo se completará si sus reglas lo permiten. De forma predeterminada, sus reglas están configuradas para que solo los usuarios autenticados tengan acceso completo de lectura y escritura a su base de datos. Esto es para proteger su base de datos contra el abuso hasta que tenga tiempo para personalizar sus reglas o configurar la autenticación.
Las reglas de la base de datos de Firebase tienen una sintaxis similar a JavaScript y vienen en cuatro tipos:
Autorización
Identificar a su usuario es solo una parte de la seguridad. Una vez que sepa quiénes son, necesita una forma de controlar su acceso a los datos en su base de datos. Las reglas de la base de datos de Firebase le permiten controlar el acceso de cada usuario. Por ejemplo, aquí hay un conjunto de reglas de seguridad que le permite a cualquiera leer la ruta /foo/ , pero nadie le escribe:
{
"rules": {
"foo": {
".read": true,
".write": false
}
}
}
.read y .write reglas de cascada, por lo que otorga esta conjuntos de reglas acceso de lectura a los datos en ruta / foo /, así como cualquier ruta más profundas, como /foo/bar/baz . Tenga en cuenta que .read y .write reglas que permitan el acceso prevalecerá sobre otras reglas en la base de datos que no permiten el acceso; en otras palabras, todos aplicables, .read y .write reglas se ORed juntos). Por lo tanto, el acceso de lectura a /foo/bar/baz aún se concederá en este ejemplo, incluso si una regla en la ruta /foo/bar/baz evalúe como falsa.
Las Reglas de la base de datos de Firebase incluyen variables y funciones integradas que le permiten referirse a otras rutas, marcas de tiempo del lado del servidor, información de autenticación y más. Este es un ejemplo de una regla que otorga acceso de escritura para usuarios autenticados a /users/<uid>/ , donde se obtiene el ID del usuario a través de la autenticación Firebase.
{
"rules": {
"users": {
"$uid": {
".write": "$uid === auth.uid"
}
}
}
}
Validación de datos
La base de datos en tiempo real de Firebase no tiene esquemas. Esto facilita el cambio de cosas a medida que se desarrolla, pero una vez que su aplicación está lista para distribuir, es importante que los datos se mantengan consistentes. El lenguaje de reglas incluye un .validate regla que le permite aplicar la lógica de validación usando las mismas expresiones usadas para .read y .write reglas. La única diferencia es que todas las reglas de validación relevantes deben evaluarse como verdaderas para que se permita la escritura (en otras palabras, todas las reglas de .validate aplicables se .validate juntas para permitir una escritura de base de datos).
Esta regla impone que los datos escritos en /foo/ deben ser una cadena de menos de 100 caracteres:
{
"rules": {
"foo": {
".validate": "newData.isString() && newData.val().length < 100"
}
}
}
Las reglas de validación tienen acceso a todas las mismas funciones y variables incorporadas como .read y .write reglas. Puede usarlos para crear reglas de validación que conozcan datos de otras partes de su base de datos, la identidad de su usuario, la hora del servidor y mucho más.
Definir índices de base de datos.
La base de datos en tiempo real de Firebase permite ordenar y consultar datos. Para tamaños de datos pequeños, la base de datos admite consultas ad hoc, por lo que generalmente no se requieren índices durante el desarrollo. Sin embargo, antes de iniciar su aplicación, es importante especificar índices para cualquier consulta que tenga para asegurarse de que continúen funcionando a medida que su aplicación crezca.
Los índices se especifican utilizando la regla .indexOn . Aquí hay un ejemplo de declaración de índice que indexaría los campos de altura y longitud para una lista de dinosaurios:
{
"rules": {
"dinosaurs": {
".indexOn": ["height", "length"]
}
}
}
