diff --git a/records/plugin-dev/KB-PLUGIN-044-glpi11-native-visibility-in-plugin-boards.md b/records/plugin-dev/KB-PLUGIN-044-glpi11-native-visibility-in-plugin-boards.md index 24c89cb..7423b9c 100644 --- a/records/plugin-dev/KB-PLUGIN-044-glpi11-native-visibility-in-plugin-boards.md +++ b/records/plugin-dev/KB-PLUGIN-044-glpi11-native-visibility-in-plugin-boards.md @@ -98,6 +98,22 @@ e são testáveis em CLI. Teste E2E que prova: sessão com `ticket => READ` (sem READALL) deve ver só os chamados onde é ator; sessão com rights zerados deve ter toda mutação negada. +## Right CUSTOM exige relogin de TODOS — gate por right NATIVO evita (padrão butterfly) + +Incidente em produção (mindscrum 1.0.0): right custom (`plugin_mindscrum_board`) +gravado em `glpi_profilerights` no install, mas o GLPI carrega rights na sessão +**no LOGIN** — o menu apareceu SÓ para quem instalou; todos os outros usuários +(inclusive super-admins) precisariam de logout/login. Sintoma: "o plugin só +aparece para quem instalou". + +Solução (1.0.1, replicando o butterfly): **gate por right NATIVO** já presente +em toda sessão — `Board::$rightname = 'ticket'` (menu/leitura = `ticket READ`; +edição = `ticket UPDATE`) + guardas por item (`canUpdateItem` etc.). Sem classe +Profile, sem `change_profile`, sem relogin. Regra prática: só crie right custom +se o plugin precisa de permissão que NENHUM right nativo representa — e aceite o +custo do relogin pós-install; para ferramentas sobre itens nativos (board de +tickets/projetos), o right nativo do item é o gate certo. + ## Bônus — XSS de atributo em JS de plugin `div.textContent = s; return div.innerHTML` escapa `& < >` mas **não aspas** —