Roles y permisos

quién puede ver qué, y quién puede borrarlo.

esfuerzo un fin de semana57 apps del cementerio la necesitan

cómo se usa · 3 pasos

  1. Copia el archivo.Botón copiar archivo. Es un SKILL.md: texto en Markdown con instrucciones para tu agente, ya con el encabezado que los agentes esperan. No tienes que entenderlo ni editarlo.
  2. Guárdalo en tu carpeta de skills.Una carpeta con el nombre de la skill y dentro el archivo SKILL.md, tal cual. En tu carpeta personal sirve para todos tus proyectos, no hace falta copiarla en cada uno. Claude Code: ~/.claude/skills/roles-y-permisos/SKILL.md · Codex: ~/.agents/skills/roles-y-permisos/SKILL.md · Cursor lee esas dos carpetas, no necesita otra. ¿Solo para un proyecto? La misma ruta sin ~/, dentro de la carpeta del proyecto.
  3. Pídele la app.Abre tu agente y escríbele en español qué quieres construir («una agenda para mi consultorio con recordatorios por WhatsApp»). Él carga la skill solo cuando hace falta; también puedes llamarla tú: /roles-y-permisos en Claude Code y Cursor, $roles-y-permisos en Codex. Cuando se trabe, vuelve a en qué te vas a trabar.

archivo de la skill

---
name: roles-y-permisos
description: quién puede ver qué, y quién puede borrarlo.
---

# Roles y permisos

Instrucciones para el agente que está construyendo esta app. Sigue esta skill cuando
agregues espacios de trabajo, invitaciones, roles o cualquier verificación de acceso.

## Cuándo usar esta skill

Actívala en cuanto se cumpla cualquiera de estas condiciones:

- Más de una persona comparte el mismo contenido o proyecto.
- Hay algo que un miembro del equipo no debería ver: facturación, datos de clientes,
  exportaciones.
- Vendes por asiento y necesitas invitar, quitar y contar miembros.
- Existe una vista de administrador distinta de la vista normal.

Esta capa separa "tengo cuenta" de "puedo hacer esto". Es lo que casi siempre falta en un
rebuild de fin de semana: el demo funciona con un usuario y filtra datos ajenos en
cuanto entra el segundo.

## Cómo construirla

Usa este stack salvo que el proyecto ya tenga otro decidido: **Postgres** con
organizaciones y membresías, verificación centralizada en el servidor, sin lógica de
permisos en el cliente.

1. Agrega organizaciones y membresías: cada recurso cuelga de una organización, nunca
   directamente de un usuario.
2. Empieza con tres roles fijos (`owner`, `member`, `viewer`). Los permisos por recurso
   llegan cuando alguien los pida de verdad, no antes.
3. Escribe una sola función que responda `puedeHacer(usuario, accion, recurso)` y
   llámala en cada endpoint. Una función, no quince `if` sueltos repartidos por el
   código.
4. Filtra siempre por organización en la consulta, no después de traer las filas.
5. Invitaciones por token con correo, expiración y aceptación explícita.
6. Registra quién cambió roles y cuándo: es el primer dato que te van a pedir cuando
   algo salga mal.

## En qué te vas a trabar

- **Ocultar un botón no es un permiso.** Si el endpoint no verifica, el permiso no
  existe, sin importar qué tan bien escondido esté en la UI.
- **El caso difícil es el último dueño:** no dejes que se elimine a sí mismo y deje la
  organización huérfana sin nadie que pueda administrarla.
- **Los permisos por campo (ver el precio pero no el margen) multiplican la
  complejidad.** Evítalos hasta tener clientes que de verdad los pidan.

## Criterio de terminado

No declares esto listo hasta que un usuario de una organización no pueda ver ni un solo
registro de otra, la eliminación del último dueño esté bloqueada, y `puedeHacer` sea el
único lugar donde vive la lógica de permisos.

cópialo en tu agente de código: Claude Code, Codex, Cursor · pégalo como su archivo de skill y sigue las instrucciones tal cual.