SaaS desde CeroArquitectura SaaS ProfesionalLección 8 de 10
Roles, Permisos y Organizaciones
Un SaaS profesional necesita RBAC (Role-Based Access Control): cada usuario tiene un rol dentro de su organización, y cada rol tiene permisos específicos. Los roles típicos son:
• Owner: Control total, puede eliminar la organización y gestionar billing • Admin: Gestiona usuarios y configuración, no puede eliminar la org • Member: Acceso completo a funcionalidades, no puede gestionar usuarios • Viewer: Solo lectura, no puede crear ni editar
La tabla de membresías conecta usuarios con organizaciones y roles: un usuario puede pertenecer a múltiples organizaciones con diferentes roles.
// Modelo de datos para RBAC
// organizaciones: { id, nombre, plan, stripe_customer_id }
// miembros: { user_id, org_id, role, invited_at }
// permisos por rol:
const PERMISOS = {
owner: ["read", "write", "delete", "manage_users", "manage_billing", "delete_org"],
admin: ["read", "write", "delete", "manage_users"],
member: ["read", "write"],
viewer: ["read"],
};
// Middleware de autorización
function requirePermission(permission) {
return async (req, res, next) => {
const { userId, orgId } = req.auth;
const member = await db.members.findFirst({
where: { userId, orgId },
});
if (!member) return res.status(403).json({ error: "No eres miembro" });
if (!PERMISOS[member.role].includes(permission)) {
return res.status(403).json({ error: "Sin permiso" });
}
req.member = member;
next();
};
}
// Uso en rutas
app.delete("/api/projects/:id",
requirePermission("delete"),
async (req, res) => {
await db.projects.delete({ where: { id: req.params.id, orgId: req.auth.orgId } });
res.json({ ok: true });
}
);
ConsejoEmpieza con 3 roles (owner, admin, member). No agregues más hasta que los clientes lo pidan. Permisos granulares demasiado pronto es complejidad innecesaria.
Practica esta lección
Resuelve los ejercicios del curso de SaaS desde Cero en la app, gratis y con corrección automática.
Empezar a practicar