// Injeta botão "Permissões" na tabela de usuários do admin (function() { var TOKEN = localStorage.getItem('auditor_token') || sessionStorage.getItem('auditor_token'); if (!TOKEN) return; // Verifica se é admin fetch('/api/auth/me', { headers: { 'Authorization': 'Bearer ' + TOKEN } }) .then(function(r) { return r.json(); }) .then(function(data) { if (!data.user || !data.user.is_admin) return; injectPermissionButtons(); }) .catch(function() {}); function injectPermissionButtons() { // Observa a tabela de usuários var observer = new MutationObserver(function() { var rows = document.querySelectorAll('table tbody tr'); if (!rows.length) return; rows.forEach(function(row) { if (row.querySelector('.perm-btn-injected')) return; // Encontra o ID do usuário na linha (assumindo que está em um data attribute ou na primeira coluna) var userId = null; var cells = row.querySelectorAll('td'); // Tenta encontrar o ID - pode estar em um link, botão, ou data attribute var editBtn = row.querySelector('a[href*="/admin/users/"][href*="/edit"], button[onclick*="edit"], [data-user-id]'); if (editBtn) { userId = editBtn.dataset.userId || editBtn.href.match(/\/admin\/users\/(\d+)/)?.[1]; } // Fallback: primeira célula pode ter o ID if (!userId && cells.length > 0) { var firstCellText = cells[0].textContent.trim(); if (/^\d+$/.test(firstCellText)) { userId = firstCellText; } } if (!userId) return; var actionsDiv = cells[cells.length - 1]?.querySelector('div') || cells[cells.length - 1]; if (!actionsDiv) return; var btn = document.createElement('a'); btn.className = 'perm-btn-injected w-8 h-8 rounded-lg bg-blue-50 text-blue-600 flex items-center justify-center hover:bg-blue-100 transition-colors'; btn.title = 'Gerenciar permissões'; btn.href = '/permissions.html?user_id=' + userId; btn.style.cssText = 'border:none;flex-shrink:0;margin:0 2px;text-decoration:none;'; btn.innerHTML = ''; if (actionsDiv.firstChild) { actionsDiv.insertBefore(btn, actionsDiv.firstChild); } else { actionsDiv.appendChild(btn); } }); }); observer.observe(document.body, { childList: true, subtree: true }); // Executa imediatamente também injectPermissionButtons(); } })();