fix: improve role assignment logic and permission handling in dashboard components

This commit is contained in:
2025-10-27 08:41:53 -03:00
parent 2c2b792b4a
commit 6bfc0c2ced
19 changed files with 2105 additions and 118 deletions

View File

@@ -105,8 +105,11 @@
// Se for alterar role, pegar a role atual do usuário
if (acao === "alterar_role" && usuariosQuery.data) {
const usuario = usuariosQuery.data.find((u: any) => u._id === usuarioId);
if (usuario) {
novaRoleId = usuario.role._id;
if (usuario && usuario.role && usuario.role._id) {
novaRoleId = usuario.role._id as Id<"roles">;
} else if (rolesQuery.data && rolesQuery.data.length > 0) {
// Se não conseguir pegar a role atual, usar a primeira role disponível
novaRoleId = rolesQuery.data[0]._id;
}
}

View File

@@ -22,55 +22,45 @@
try {
salvando = true;
// Se está marcando podeGravar, deve marcar podeConsultar e podeAcessar também
let podeAcessar = valor;
let podeConsultar = valor;
let podeGravar = campo === "podeGravar" ? valor : false;
// Buscar a permissão atual
const roleData = matrizQuery.data?.find((r) => r.role._id === roleId);
const permissaoAtual = roleData?.permissoes.find((p) => p.menuPath === menuPath);
if (campo === "podeConsultar") {
podeConsultar = valor;
podeGravar = false; // Desmarcar gravar se desmarcou consultar
if (!permissaoAtual) {
throw new Error("Permissão não encontrada");
}
// Inicializar com valores atuais
let podeAcessar = permissaoAtual.podeAcessar;
let podeConsultar = permissaoAtual.podeConsultar;
let podeGravar = permissaoAtual.podeGravar;
// Aplicar lógica de dependências baseada no campo alterado
if (campo === "podeAcessar") {
podeAcessar = valor;
// Se desmarcou "Acessar", desmarcar tudo
if (!valor) {
podeConsultar = false;
podeGravar = false;
}
}
// Buscar a permissão atual para aplicar lógica correta
const roleData = matrizQuery.data?.find((r) => r.role._id === roleId);
const permissaoAtual = roleData?.permissoes.find((p) => p.menuPath === menuPath);
if (permissaoAtual) {
// Aplicar lógica de dependências
if (campo === "podeGravar" && valor) {
// Se marcou "Acessar", manter os outros valores como estão
} else if (campo === "podeConsultar") {
podeConsultar = valor;
// Se marcou "Consultar", marcar "Acessar" automaticamente
if (valor) {
podeAcessar = true;
podeConsultar = true;
podeGravar = true;
} else if (campo === "podeConsultar" && valor) {
podeAcessar = true;
podeConsultar = true;
podeGravar = permissaoAtual.podeGravar;
} else if (campo === "podeAcessar" && !valor) {
podeAcessar = false;
podeConsultar = false;
podeGravar = false;
} else if (campo === "podeConsultar" && !valor) {
podeAcessar = permissaoAtual.podeAcessar;
podeConsultar = false;
podeGravar = false;
} else if (campo === "podeGravar" && !valor) {
podeAcessar = permissaoAtual.podeAcessar;
podeConsultar = permissaoAtual.podeConsultar;
podeGravar = false;
} else {
podeAcessar = permissaoAtual.podeAcessar;
podeConsultar = permissaoAtual.podeConsultar;
podeGravar = permissaoAtual.podeGravar;
// Se desmarcou "Consultar", desmarcar "Gravar"
podeGravar = false;
}
} else if (campo === "podeGravar") {
podeGravar = valor;
// Se marcou "Gravar", marcar "Consultar" e "Acessar" automaticamente
if (valor) {
podeAcessar = true;
podeConsultar = true;
}
// Se desmarcou "Gravar", manter os outros como estão
}
await client.mutation(api.menuPermissoes.atualizarPermissao, {