🛡️ Guía de Blindaje: Reglas de Seguridad Firebase PAIDAR

Copia y pega este código en la sección "Realtime Database" > "Rules" de tu consola de Firebase para asegurar que nadie pueda robar información o enviar mensajes sin permiso.

{
  "rules": {
    // 1. USUARIOS: Seguridad Individual
    "users": {
      "$uid": {
        // Solo el dueño de la cuenta o un Administrador pueden leer el perfil
        ".read": "auth != null && (auth.uid == $uid || root.child('users').child(auth.uid).child('role').val() == 'admin')",
        
        // Solo el dueño puede actualizar su progreso, o el Admin cambiar roles
        ".write": "auth != null && (auth.uid == $uid || root.child('users').child(auth.uid).child('role').val() == 'admin')",
        
        // Indexamos por email para que el panel administrativo pueda buscar rápido
        ".indexOn": ["email", "market", "timestamp"]
      }
    },

    // 2. LEADS: Captura de Prospectos (Test MKT)
    "leads": {
      "test-salud-financiera": {
        // Solo el administrador puede ver la lista de leads
        ".read": "auth != null && root.child('users').child(auth.uid).child('role').val() == 'admin'",
        // Cualquiera (incluso sin login) puede enviar su test, pero no borrar otros
        "$leadId": {
          ".write": "!data.exists() || (auth != null && root.child('users').child(auth.uid).child('role').val() == 'admin')"
        },
        ".indexOn": ["timestamp"]
      },
      "intereses-seguros": {
        ".read": "auth != null && root.child('users').child(auth.uid).child('role').val() == 'admin'",
        ".write": "auth != null", // Requiere estar logueado para mostrar interés
        ".indexOn": ["timestamp"]
      }
    },

    // 3. NOTIFICACIONES: Protección contra Spam
    "notifications": {
      "$uid": {
        // Solo el usuario dueño de la campana puede leer sus mensajes
        ".read": "auth != null && auth.uid == $uid",
        
        // Solo el Admin puede escribir (enviar) notificaciones
        // El usuario solo puede escribir para marcar como 'leído' (read: true)
        ".write": "auth != null && (root.child('users').child(auth.uid).child('role').val() == 'admin' || (auth.uid == $uid && newData.hasChildren(['read'])))"
      }
    },

    // 4. CONFIGURACIÓN: Solo el Admin cambia el sistema
    "config": {
      ".read": "true", // Público para que la web sepa qué sectores hay
      ".write": "auth != null && root.child('users').child(auth.uid).child('role').val() == 'admin'"
    }
  }
}

🚀 Pasos para aplicar:

  1. Ve a tu Consola de Firebase.
  2. Entra en tu proyecto.
  3. En el menú izquierdo ve a Build > Realtime Database.
  4. Haz clic en la pestaña Rules.
  5. Borra lo que haya y pega el código de arriba.
  6. Haz clic en Publish.

✅ ¿Qué logramos con esto?