riseup-squad18/MEDICONNECT 2/scripts/verificar-fernando.js

188 lines
6.8 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import axios from "axios";
const SUPABASE_URL = "https://yuanqfswhberkoevtmfr.supabase.co";
const SUPABASE_ANON_KEY =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl1YW5xZnN3aGJlcmtvZXZ0bWZyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQ5NTQzNjksImV4cCI6MjA3MDUzMDM2OX0.g8Fm4XAvtX46zifBZnYVH4tVuQkqUH6Ia9CXQj4DztQ";
async function verificarPermissoesFernando() {
try {
console.log("═══════════════════════════════════════════════════");
console.log("🔍 VERIFICANDO PERMISSÕES DE FERNANDO");
console.log("═══════════════════════════════════════════════════\n");
// 1. Login como Fernando
console.log("🔑 Fazendo login como Fernando...");
const loginResponse = await axios.post(
`${SUPABASE_URL}/auth/v1/token?grant_type=password`,
{
email: "fernando.pirichowski@souunit.com.br",
password: "fernando",
},
{
headers: {
apikey: SUPABASE_ANON_KEY,
"Content-Type": "application/json",
},
}
);
const token = loginResponse.data.access_token;
const userId = loginResponse.data.user.id;
const userEmail = loginResponse.data.user.email;
console.log("✅ Login realizado com sucesso!");
console.log(` User ID: ${userId}`);
console.log(` Email: ${userEmail}\n`);
// 2. Buscar dados do usuário na tabela profiles
console.log("👤 Buscando dados na tabela profiles...");
const userResponse = await axios.get(
`${SUPABASE_URL}/rest/v1/profiles?id=eq.${userId}&select=*`,
{
headers: {
apikey: SUPABASE_ANON_KEY,
Authorization: `Bearer ${token}`,
},
}
);
if (userResponse.data.length === 0) {
console.log("❌ Usuário não encontrado na tabela profiles!\n");
} else {
const user = userResponse.data[0];
console.log("✅ Dados do usuário:");
console.log(` Nome: ${user.full_name || "N/A"}`);
console.log(` Email: ${user.email}`);
console.log(` is_admin: ${user.is_admin}`);
console.log(` is_secretary: ${user.is_secretary}`);
console.log(` is_admin_or_manager: ${user.is_admin_or_manager}\n`);
}
// 3. Buscar roles na tabela user_roles
console.log("🎭 Buscando roles na tabela user_roles...");
const rolesResponse = await axios.get(
`${SUPABASE_URL}/rest/v1/user_roles?user_id=eq.${userId}&select=*`,
{
headers: {
apikey: SUPABASE_ANON_KEY,
Authorization: `Bearer ${token}`,
},
}
);
if (rolesResponse.data.length === 0) {
console.log("❌ Nenhuma role encontrada!\n");
} else {
console.log("✅ Roles encontradas:");
rolesResponse.data.forEach((role) => {
console.log(`${role.role}`);
});
console.log("");
}
// 4. Testar acesso aos pacientes
console.log("🏥 Testando acesso aos pacientes...");
try {
const pacientesResponse = await axios.get(
`${SUPABASE_URL}/rest/v1/patients?select=id,full_name,email&limit=5`,
{
headers: {
apikey: SUPABASE_ANON_KEY,
Authorization: `Bearer ${token}`,
},
}
);
console.log(
`✅ ACESSO PERMITIDO! (${pacientesResponse.data.length} pacientes encontrados)`
);
if (pacientesResponse.data.length > 0) {
console.log("\n📋 Pacientes acessíveis:");
pacientesResponse.data.forEach((p) => {
console.log(
`${p.full_name || "Sem nome"} - ${p.email || "Sem email"}`
);
});
}
console.log("");
} catch (error) {
console.log(`❌ ACESSO NEGADO!`);
console.log(
` Erro: ${error.response?.data?.message || error.message}\n`
);
}
// 5. Testar criação de relatório
console.log("📝 Testando permissão para criar relatório...");
try {
// Não vou criar de fato, só testar se tem permissão
const testReportData = {
patient_id: "00000000-0000-0000-0000-000000000000", // ID fake para teste
exam: "Teste de permissão",
diagnosis: "Teste",
conclusion: "Teste",
order_number: "TEST-001",
status: "draft",
};
await axios.post(`${SUPABASE_URL}/rest/v1/reports`, testReportData, {
headers: {
apikey: SUPABASE_ANON_KEY,
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
Prefer: "return=representation",
},
});
console.log("✅ PERMISSÃO PARA CRIAR RELATÓRIOS: SIM\n");
} catch (error) {
if (error.response?.status === 403) {
console.log("❌ PERMISSÃO PARA CRIAR RELATÓRIOS: NEGADA");
console.log(
` Erro: ${error.response?.data?.message || "Acesso negado"}\n`
);
} else {
console.log(
"⚠️ Erro ao testar (pode ser FK constraint, não necessariamente permissão)"
);
console.log(` ${error.response?.data?.message || error.message}\n`);
}
}
// 6. Resumo
console.log("═══════════════════════════════════════════════════");
console.log("📊 RESUMO DAS PERMISSÕES DE FERNANDO");
console.log("═══════════════════════════════════════════════════");
const userData = userResponse.data[0] || {};
const roles = rolesResponse.data.map((r) => r.role);
console.log("\n🎭 Roles:", roles.length > 0 ? roles.join(", ") : "Nenhuma");
console.log("👑 Is Admin:", userData.is_admin || false);
console.log("👔 Is Secretary:", userData.is_secretary || false);
console.log("👨‍💼 Is Admin/Manager:", userData.is_admin_or_manager || false);
console.log("");
if (userData.is_admin || roles.includes("admin")) {
console.log("✅ Fernando TEM permissões de ADMIN");
} else {
console.log("❌ Fernando NÃO TEM permissões de ADMIN");
console.log("\n💡 Para adicionar permissões de admin:");
console.log(" 1. Execute: node scripts/dar-admin-fernando.js");
console.log(" 2. Ou use o painel do Supabase");
}
console.log("");
} catch (error) {
console.error("\n❌ ERRO:", error.response?.data || error.message);
if (error.code === "ENOTFOUND") {
console.log("\n⚠ Problema de conexão com Supabase");
} else if (error.response?.status === 400) {
console.log("\n⚠ Credenciais inválidas ou usuário não existe");
}
}
}
verificarPermissoesFernando();