El servidor Quién puede hacer qué
Quién puede hacer qué
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.En esta página
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.
Las acciones
| Acción | Se pregunta para |
|---|---|
| list | Lo que hay en una carpeta; null para arriba del todo. Después se pregunta read por cada entrada. |
| read | Una entrada, una búsqueda, Recientes, la papelera, su actividad: lo que una persona puede ver. |
| create | Una carpeta, con la carpeta en la que va. |
| upload | Un 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. |
| rename | La entrada renombrada, o una carpeta a la que se le da un color. |
| move | La entrada, y después la carpeta a la que va. |
| trash, restore | A la papelera, y fuera de ella. |
| delete | Eliminado para siempre: los bytes salen del bucket. |
| download | Una dirección para leer el archivo, durante unos minutos. |
| comment | Aún no se pregunta por nada: lo que un comentarista puede hacer además de un lector. |
| share | Compartirlo, retirarlo, y sus enlaces. |
| configure | Los ajustes de todo el drive. Con byRoles, un usuario que identify da como { id, admin: true }. |
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.
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.
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);
}Cuando dice que no
Sign in first. · You may not do that here.
401 es identify devolviendo null; 403 es authorize devolviendo false.
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.