fix(users): resolve visibility of new users and persistence of matrix templates & 3D rotation
This commit is contained in:
@@ -345,6 +345,22 @@ export const useMatrizAcessos = () => {
|
||||
);
|
||||
|
||||
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)
|
||||
const dbPermission =
|
||||
novoNivel === 'criar'
|
||||
@@ -403,6 +419,21 @@ export const useMatrizAcessos = () => {
|
||||
);
|
||||
|
||||
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
|
||||
const uipRecords = Object.entries(novoMap).map(([resKey, nivel]) => ({
|
||||
user_id: userId,
|
||||
|
||||
@@ -94,14 +94,14 @@ export function useUserManagement() {
|
||||
.from('profiles')
|
||||
.select(`
|
||||
*,
|
||||
functions (name, description),
|
||||
privileges (name, description, permissions)
|
||||
functions:function_id (name, description),
|
||||
privileges:privilege_id (name, description, permissions)
|
||||
`)
|
||||
.neq('status', 'pending')
|
||||
.order('created_at', { ascending: false });
|
||||
|
||||
if (error) throw error;
|
||||
setUsers(data || []);
|
||||
setUsers((data as any) || []);
|
||||
} catch (error) {
|
||||
console.error('Error fetching users:', error);
|
||||
toast.error('Erro ao carregar usuários');
|
||||
@@ -150,7 +150,7 @@ export function useUserManagement() {
|
||||
.order('name');
|
||||
|
||||
if (error) throw error;
|
||||
setPrivileges(data || []);
|
||||
setPrivileges((data as any) || []);
|
||||
} catch (error) {
|
||||
console.error('Error fetching privileges:', error);
|
||||
toast.error('Erro ao carregar privilégios');
|
||||
@@ -215,7 +215,7 @@ export function useUserManagement() {
|
||||
const err = error as Error;
|
||||
if (err.message?.includes('User with this email already exists')) {
|
||||
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');
|
||||
} else {
|
||||
toast.error('Erro ao criar usuário');
|
||||
@@ -403,7 +403,7 @@ export function useUserManagement() {
|
||||
.from('privileges')
|
||||
.insert({
|
||||
...data,
|
||||
permissions: data.permissions || {}
|
||||
permissions: (data.permissions as any) || {}
|
||||
})
|
||||
.select()
|
||||
.single();
|
||||
@@ -429,7 +429,7 @@ export function useUserManagement() {
|
||||
try {
|
||||
const { error } = await supabase
|
||||
.from('privileges')
|
||||
.update(data)
|
||||
.update(data as any)
|
||||
.eq('id', id);
|
||||
|
||||
if (error) throw error;
|
||||
|
||||
Reference in New Issue
Block a user