Por: Juan Andrés Núñez
Juan Andrés Núñez - juanwmedia

Especialista en tecnologías Web. Me dedico a enseñar desarrollo Web moderno a cualquier persona (físicamente en clase y a través de Internet) desde una perspectiva holística: teniendo en cuenta las competencias técnicas necesarias, junto a las habilidades personales o soft skills. Tienes más información en mi Web.

  • 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 en request.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;
    }
  }
}

Presentación


Firebase Auth


Cloud Firestore 🔥


Cloud Storage 🗄


No te pierdas ninguna novedad

Escuela Vue en Twitter

Participa en la Comunidad Escuela Vue

Comunidad Escuela Vue