fix(users): resolve visibility of new users and persistence of matrix templates & 3D rotation

This commit is contained in:
2026-09-24 17:32:17 +00:00
parent 0249f6cc33
commit 48e845c243
2 changed files with 38 additions and 7 deletions
+31
View File
@@ -345,6 +345,22 @@ export const useMatrizAcessos = () => {
); );
try { try {
// Garantir que a chave do recurso exista em interface_resources para evitar erro de Foreign Key
const { error: resourceError } = await supabase
.from('interface_resources')
.upsert(
{
resource_key: resourceKey,
resource_name: resourceKey,
is_submenu: false
},
{ onConflict: 'resource_key' }
);
if (resourceError) {
console.error('Erro ao registrar recurso na tabela interface_resources:', resourceError);
}
// 1. Gravação direta e individual por usuário na tabela user_interface_permissions (Prioridade Máxima) // 1. Gravação direta e individual por usuário na tabela user_interface_permissions (Prioridade Máxima)
const dbPermission = const dbPermission =
novoNivel === 'criar' novoNivel === 'criar'
@@ -403,6 +419,21 @@ export const useMatrizAcessos = () => {
); );
try { try {
// Garantir que todos os recursos do template existam em interface_resources
const resourceRecords = Object.keys(novoMap).map(resKey => ({
resource_key: resKey,
resource_name: resKey,
is_submenu: false
}));
const { error: resourceError } = await supabase
.from('interface_resources')
.upsert(resourceRecords, { onConflict: 'resource_key' });
if (resourceError) {
console.error('Erro ao registrar recursos na tabela interface_resources:', resourceError);
}
// 1. Gravação direta em lote na tabela user_interface_permissions // 1. Gravação direta em lote na tabela user_interface_permissions
const uipRecords = Object.entries(novoMap).map(([resKey, nivel]) => ({ const uipRecords = Object.entries(novoMap).map(([resKey, nivel]) => ({
user_id: userId, user_id: userId,
+7 -7
View File
@@ -94,14 +94,14 @@ export function useUserManagement() {
.from('profiles') .from('profiles')
.select(` .select(`
*, *,
functions (name, description), functions:function_id (name, description),
privileges (name, description, permissions) privileges:privilege_id (name, description, permissions)
`) `)
.neq('status', 'pending') .neq('status', 'pending')
.order('created_at', { ascending: false }); .order('created_at', { ascending: false });
if (error) throw error; if (error) throw error;
setUsers(data || []); setUsers((data as any) || []);
} catch (error) { } catch (error) {
console.error('Error fetching users:', error); console.error('Error fetching users:', error);
toast.error('Erro ao carregar usuários'); toast.error('Erro ao carregar usuários');
@@ -150,7 +150,7 @@ export function useUserManagement() {
.order('name'); .order('name');
if (error) throw error; if (error) throw error;
setPrivileges(data || []); setPrivileges((data as any) || []);
} catch (error) { } catch (error) {
console.error('Error fetching privileges:', error); console.error('Error fetching privileges:', error);
toast.error('Erro ao carregar privilégios'); toast.error('Erro ao carregar privilégios');
@@ -215,7 +215,7 @@ export function useUserManagement() {
const err = error as Error; const err = error as Error;
if (err.message?.includes('User with this email already exists')) { if (err.message?.includes('User with this email already exists')) {
toast.error('Este e-mail já está em uso'); toast.error('Este e-mail já está em uso');
} else if (error.message?.includes('Only admins can create new users')) { } else if (err.message?.includes('Only admins can create new users')) {
toast.error('Apenas administradores podem criar usuários'); toast.error('Apenas administradores podem criar usuários');
} else { } else {
toast.error('Erro ao criar usuário'); toast.error('Erro ao criar usuário');
@@ -403,7 +403,7 @@ export function useUserManagement() {
.from('privileges') .from('privileges')
.insert({ .insert({
...data, ...data,
permissions: data.permissions || {} permissions: (data.permissions as any) || {}
}) })
.select() .select()
.single(); .single();
@@ -429,7 +429,7 @@ export function useUserManagement() {
try { try {
const { error } = await supabase const { error } = await supabase
.from('privileges') .from('privileges')
.update(data) .update(data as any)
.eq('id', id); .eq('id', id);
if (error) throw error; if (error) throw error;