// Attribution d'un rôle depuis le serveur (jamais depuis le navigateur) : DATABASE_URL=… pnpm tsx scripts/grant-role.ts import postgres from "postgres"; const [email, role] = process.argv.slice(2); if (!email || !["ADMIN", "MODERATOR", "AGENT_VERIFIED"].includes(role ?? "")) { console.error("usage: grant-role.ts "); process.exit(1); } const sql = postgres(process.env.DATABASE_URL!, { max: 1 }); const [u] = await sql`select id from users where email = ${email.toLowerCase()}`; if (!u) { console.error("utilisateur introuvable (il doit s'être connecté une première fois)"); process.exit(1); } await sql`insert into user_roles (user_id, role, note) values (${u.id}, ${role}, 'CLI serveur') on conflict do nothing`; await sql`insert into audit_events (actor_id, action, object_type, object_id, metadata_redacted) values (null, 'cli.grant_role', 'user', ${u.id}, ${sql.json({ role })})`; console.log(`rôle ${role} attribué à ${email}`); await sql.end();