fix: improve role assignment logic and permission handling in dashboard components
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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, {
|
||||
|
||||
Reference in New Issue
Block a user