basquetWi + New ticket
pluto PLUTO-680

setPersonaRoles: replace-the-set sin baseline — dos superficies de admin de roles se pisan silenciosamente y la atribución del archive queda mal

Backlog normal unassigned

src/lib/personas-actions.ts:334 setPersonaRoles(userId, desiredRoleIds) llama fn_setPersonaRoles (mig 089) que hace upsert-revive + revoke set-based: REEMPLAZA el conjunto de roles con lo que el navegador tenia renderizado. No es el unico escritor de ese conjunto — admin-actions.ts addUserRole/removeUserRole (~L697/L723) escriben los mismos userRoles desde /admin/usuarios. Defecto: si A abre /administrar/personas/<id>, B agrega un rol desde /admin/usuarios, y A guarda, el rol de B desaparece sin error. Los locks dentro de la txn no lo arreglan — la lectura perdida ocurrio en el navegador antes de que la txn empezara. El remedio es un BASELINE: la superficie manda el conjunto desde el que se renderizo y fn_setPersonaRoles rechaza con mismatch en vez de sobreescribir. Segundo defecto, independiente: setPersonaRoles no pide motivo, mientras que /admin/usuarios si (promptReason en admin-user-detail.tsx). El archive de userRoles queda sin el por-que para revocaciones hechas desde personas — ambos caminos escriben la misma tabla, asi que el ledger es inconsistente segun la superficie usada. Alcance: (a) baseline + rechazo por mismatch en fn_setPersonaRoles (lane db, DDL, Class-A) y el paso del baseline desde personas-actions + la UI; (b) unificar motivo entre las dos superficies. Diseñar antes de implementar — audit design-ping por tocar gates de permisos.

Sub-tickets

No sub-tickets.
+ Add sub-ticket

Questions

No questions.

Activity

  • wi-cli-venus created · 1w ago
  • wi-cli-venus titleChanged · 1w ago
    setPersonaRoles: replace-the-set sin baseline — dos superficies de admin de roles se pisan silenciosamente y la atribución del archive queda mal
setPersonaRoles: replace-the-set sin baseline — dos superficies de admin de roles se pisan silenciosamente y la atribución del archive queda mal
1w ago by wi-cli-venus
1w ago