- roleCheck.js: isAuditor()/canEditContent(); canEditCode() tambien excluye auditor. Superficie editor/developer intacta (verificado contra el codigo pre-cambio en el test). - records/tables/media/languages: tools de escritura gateadas con canEditContent(), orden de registro original preservado. - agents/soporte: agente de evaluacion de incidencias en produccion, allowed_tools allowlist namespaceada (23 acai_code + 18 playwright, cero fetch), system.md con formato de informe obligatorio y trato del texto del cliente como dato no confiable. - test/auditor-role.test.js: 22 tests de superficie exacta por rol.
48 lines
1.6 KiB
JavaScript
48 lines
1.6 KiB
JavaScript
/**
|
|
* Helper central para determinar el rol efectivo del MCP y bloquear tools
|
|
* peligrosas cuando el user es "editor" o "auditor".
|
|
*
|
|
* El rol se recibe principalmente via env var ACAI_ROLE_OVERRIDE inyectada
|
|
* por el backend Python (agentic.py y cronjobs.py). Hay autoderivacion
|
|
* defensiva en caso de que alguien lance el MCP sin el override:
|
|
* - Si ACAI_MODE(_OVERRIDE) = "production" → rol editor por defecto.
|
|
* - Si no → rol developer.
|
|
*
|
|
* Roles y permisos:
|
|
* - "developer": todo (codigo + contenido).
|
|
* - "editor": contenido si, codigo no.
|
|
* - "auditor": SOLO LECTURA TOTAL — ni codigo, ni contenido, ni estructura
|
|
* de BD, ni media. Se usa para evaluar incidencias en produccion sin
|
|
* tocar nada.
|
|
*/
|
|
export function getEffectiveRole() {
|
|
if (process.env.ACAI_ROLE_OVERRIDE) return process.env.ACAI_ROLE_OVERRIDE;
|
|
if (process.env.ACAI_MODE_OVERRIDE === "production") return "editor";
|
|
if (process.env.ACAI_MODE === "production") return "editor";
|
|
return "developer";
|
|
}
|
|
|
|
/**
|
|
* True si el rol efectivo es "auditor" (solo lectura total).
|
|
*/
|
|
export function isAuditor() {
|
|
return getEffectiveRole() === "auditor";
|
|
}
|
|
|
|
/**
|
|
* True si el rol efectivo puede editar archivos de codigo.
|
|
* Los roles permitidos son todo lo que NO sea "editor" ni "auditor".
|
|
*/
|
|
export function canEditCode() {
|
|
const role = getEffectiveRole();
|
|
return role !== "editor" && role !== "auditor";
|
|
}
|
|
|
|
/**
|
|
* True si el rol efectivo puede editar contenido (registros, tablas, media,
|
|
* traducciones). "editor" y "developer" pueden; "auditor" no.
|
|
*/
|
|
export function canEditContent() {
|
|
return !isAuditor();
|
|
}
|