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.

  • Antes de comenzar hemos de actualizar rooms.js y RoomsView.vue para solucionar un error a la hora de procesar el orden de nuestra colección rooms.
// rooms.js
roomsByDate: state => {
  return state.rooms.sort(function(a, b) {
    return new Date(b.createdAt) - new Date(a.createdAt);
  });
}

createRoom(state, { roomData, id }) {
  ...
  state.rooms.push(roomData);
},

// RoomsView.vue
<RoomsComponent
  :unread-messages="unreadMessages"
  :rooms="$store.getters['rooms/roomsByDate']"
/>
  • Ahora podemos poner en practica lo aprendido en la lección anterior y componer nuestras reglas de seguridad.
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {  
    match /{document=**} {
        allow read, write: if false;
    }
        
    match /rooms/{roomID} {
        allow read, create: if request.auth != null;
        allow update, delete: if request.auth.uid == resource.data.adminUid;
    }
    
    match /{path=**}/messages/{messageID} {
        // Leer si estás autentificado
        allow read: if request.auth != null;
      
        // 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