ReboFilesDocs
Empezar3
Qué es ReboFiles
Primeros pasos
Demos para ejecutar
Ponlo en tu app6
Componente de React
Headless: tu propia interfaz
Sin framework
Estilos y temas
Teclado y accesibilidad
Idiomas
Archivos9
Subidas
Vistas previas y el visor
Búsqueda
Cambios en vivo y carpetas grandes
Comentarios
Destacados y campos
Versiones, papelera y espacio
Descargar como .zip
Documentos de Word
El servidor14
La ruta
Frameworks e inicio de sesión
Quién puede hacer qué
Almacenamiento: S3, GCS, Azure y disco
Revisar las subidas
Metadatos: SQLite y Postgres
Esquema de la base de datos
Compartir y enlaces
Actividad y notificaciones
Ganchos, registros y límites
Retención, bloqueos y exportación
Escritorio y otros orígenes
Sincronizar una carpeta
Ir a producción
En equipo1
Asistentes de IA (MCP)
Referencia5
Paquetes
Componentes y hooks
API del cliente
Rutas HTTP
Estado y hoja de ruta
↑↓ para moverte↵ para abrirEsc para cerrar38 páginas

El servidor Quién puede hacer qué

Quién puede hacer qué

ReboFiles no tiene usuarios propios. identify dice quién pregunta, a partir de tu sesión; authorize se consulta en cada ruta, con la entrada de la que se trata.
Quién

identify

Con el Request, devuelve { id } para alguien con sesión, o null, que se responde con 401. El id es como el drive lo nombra: propietarios, comparticiones, actividad. admin: true puede configurar el drive con byRoles.

Qué

Las acciones

AcciónSe pregunta para
listLo que hay en una carpeta; null para arriba del todo. Después se pregunta read por cada entrada.
readUna entrada, una búsqueda, Recientes, la papelera, su actividad: lo que una persona puede ver.
createUna carpeta, con la carpeta en la que va.
uploadUn archivo, con la carpeta en la que va; una nueva versión, sus imágenes reducidas, su texto, con el archivo. Se vuelve a preguntar al terminar.
renameLa entrada renombrada, o una carpeta a la que se le da un color.
moveLa entrada, y después la carpeta a la que va.
trash, restoreA la papelera, y fuera de ella.
deleteEliminado para siempre: los bytes salen del bucket.
downloadUna dirección para leer el archivo, durante unos minutos.
commentAún no se pregunta por nada: lo que un comentarista puede hacer además de un lector.
shareCompartirlo, retirarlo, y sus enlaces.
configureLos ajustes de todo el drive. Con byRoles, un usuario que identify da como { id, admin: true }.
Roles

byRoles

Según el propio drive: el propietario puede hacerlo todo con una entrada y con lo que tiene dentro; aquellos con quienes se comparte, lo que permita su rol. Un lector mira, lee y descarga; un editor además crea, sube, renombra, mueve y manda a la papelera; solo el propietario borra para siempre y comparte. Cualquiera con sesión puede mirar arriba del todo y poner cosas ahí; a cada uno le muestra lo suyo.

Tuyas

Reglas propias

Llama a byRoles desde las tuyas. El cuarto argumento es el drive entero, para reglas que miran las carpetas en las que está una entrada.

lib/auth.ts
import { type Action, type User, byRoles } from '@rebofiles/server';
import type { Drive, Entry } from '@rebofiles/core';

export function mayI(user: User, action: Action, entry: Entry | null, drive: Drive): boolean {
  // Your rules first: an auditor may look at everything, never change it.
  if (isAuditor(user)) return ['list', 'read', 'download'].includes(action);
  return byRoles(user, action, entry, drive);
}
Errores

Cuando dice que no

Sign in first. · You may not do that here.

401 es identify devolviendo null; 403 es authorize devolviendo false.

Equipos

Grupos

createDriveHandler({
  // …
  identify: async (request) => {
    const user = await session(request);
    // The groups your application says they are in: what is shared with "group:sales" is theirs to read.
    return user ? { id: user.id, groups: await groupsOf(user.id) } : null;
  },
  authorize: byRoles,
});

await client.share(folder.id, 'group:sales', 'editor');

Una compartición nombra a alguien por su id, a todos los que inician sesión como *, o a un grupo como group:<id>. Quién está en un grupo es cosa de tu aplicación, dicho por identify con cada persona: el drive no guarda listas de miembros, así que quien entra o sale de un equipo en tu aplicación tiene, o deja de tener, lo que se le dio en su siguiente petición. En el diálogo de compartir, group:sales se escribe como un id; Compartido conmigo muestra lo que se le dio a un grupo suyo.