Optimizando las reglas de seguridad Firebase
Presentación
Firebase Auth
Cloud Firestore
Cloud Storage
Cloud Functions
Curso Firebase para Web se encuentra en desarrollo. Vuelve pronto para encontrar nuevas lecciones.
- Con las funciones podemos evitar repetir las mismas instrucciones una y otra vez.
- Por otro lado, gracias al objeto
resource.data
podemos hacer comparaciones con nuestra propia petición enrequest.resource
para realizar una validación de datos efectiva.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
match /rooms/{roomID} {
allow read: if isAuth();
allow create: if isAuth()
&& isComplete(request.resource.data.name)
&& isComplete(request.resource.data.description);
allow update: if request.auth.uid == resource.data.adminUid
&& isComplete(request.resource.data.name)
&& isComplete(request.resource.data.description);
allow delete: if request.auth.uid == resource.data.adminUid;
}
function isAuth() {
return request.auth != null
}
function isComplete(prop) {
return prop is string && prop.size() > 10 && prop.size() < 160;
}
match /{path=**}/messages/{messageID} {
// Leer si estás autentificado
allow read: if isAuth();
// Escribir si estás dentro de la sala
allow create: if request.resource.data.roomId in get(/databases/$(database)/documents/users/$(request.auth.uid)).data.connected;
// Actualizar (modificamos perfil) si los mensajes son del usuario
allow update: if resource.data.userId == request.auth.uid;
// Eliminar si eres el admin
allow delete: if get(/databases/$(database)/documents/rooms/$(resource.data.roomId)).data.adminUid == request.auth.uid;
}
match /users/{userID} {
allow read, write: if request.auth.uid == userID;
}
}
}
El primer headless CMS tanto para desarrolladores como para marketers. Pruébalo gratis.
¿Tienes alguna pregunta sobre esta lección de Curso Firebase para Web?
Resuelve todas tus dudas sobre Firebase en la Comunidad de Escuela Vue: un lugar donde participar, aprender y ayudar. ¡Te esperamos!.
Tras el registro (si no lo has hecho ya) serás redirigido/a al canal adecuado en la Comunidad.