From d4e4df7ad38494575e3f41951d3d477984ca5060 Mon Sep 17 00:00:00 2001 From: Ruan Bueno Date: Wed, 3 Sep 2025 17:13:54 -0300 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20pequenas=20altera=C3=A7=C3=B5es=20no?= =?UTF-8?q?=20gerenciamento=20de=20usu=C3=A1rios?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/(authenticated)/admin/users/page.tsx | 239 +++++++++++++------ 1 file changed, 165 insertions(+), 74 deletions(-) diff --git a/src/app/(authenticated)/admin/users/page.tsx b/src/app/(authenticated)/admin/users/page.tsx index 79208e44..f120bc4b 100644 --- a/src/app/(authenticated)/admin/users/page.tsx +++ b/src/app/(authenticated)/admin/users/page.tsx @@ -260,6 +260,47 @@ function UserManagementCard({ user, allForms, onUserUpdate }: UserManagementCard }) } + // Função auxiliar para encontrar rota relacionada a uma permissão + const getRouteForPermission = (permission: string): string | null => { + for (const [routeId, permissions] of Object.entries(ROUTE_PERMISSIONS_MAP)) { + if (permissions.includes(permission)) { + return routeId; + } + } + return null; + } + + // Função para gerenciar permissão individual e sua rota relacionada + const handlePermissionToggle = (permission: string, checked: boolean, updateFn: () => void) => { + // Executar a atualização da permissão + updateFn(); + + // Se a permissão foi desmarcada, verificar se deve desmarcar a rota relacionada + if (!checked) { + const relatedRoute = getRouteForPermission(permission); + if (relatedRoute) { + // Usar setTimeout para aguardar a atualização do estado + setTimeout(() => { + setPermissionsData(prev => { + const currentRoutes = prev.accessible_routes ?? []; + const newRoutes = currentRoutes.filter(route => route !== relatedRoute); + + return { + ...prev, + accessible_routes: newRoutes, + }; + }); + + // Mostrar notificação + toast({ + title: "Rota relacionada desativada", + description: `A rota ${AVAILABLE_ROUTES.find(r => r.id === relatedRoute)?.name} foi desativada automaticamente.`, + }); + }, 0); + } + } + } + const handleRouteToggle = (routeId: string, checked: boolean) => { const currentRoutes = permissionsData.accessible_routes ?? [] const newRoutes = checked @@ -271,9 +312,11 @@ function UserManagementCard({ user, allForms, onUserUpdate }: UserManagementCard accessible_routes: newRoutes, }) - // Auto-selecionar permissões relacionadas se a rota for ativada - if (checked && ROUTE_PERMISSIONS_MAP[routeId]) { + // Auto-gerenciar permissões relacionadas quando rota for ativada/desativada + if (ROUTE_PERMISSIONS_MAP[routeId]) { const relatedPermissions = ROUTE_PERMISSIONS_MAP[routeId] + + // Atualizar permissões de conteúdo (events, flyers, rooms, cars) const newContent = { can_create_event: false, can_create_flyer: false, @@ -282,9 +325,19 @@ function UserManagementCard({ user, allForms, onUserUpdate }: UserManagementCard ...permissionsData.content } + // Atualizar permissões de formulários + let newForms = permissionsData.forms; + relatedPermissions.forEach((permission: string) => { if (permission in newContent) { - (newContent as Record)[permission] = true + (newContent as Record)[permission] = checked + } else if (permission === 'can_create_form') { + newForms = { + ...permissionsData.forms, + can_create_form: checked, + unlocked_forms: permissionsData.forms?.unlocked_forms ?? [], + hidden_forms: permissionsData.forms?.hidden_forms ?? [], + } } }) @@ -292,12 +345,14 @@ function UserManagementCard({ user, allForms, onUserUpdate }: UserManagementCard ...permissionsData, accessible_routes: newRoutes, content: newContent, + forms: newForms, }) // Mostrar notificação + const action = checked ? "ativadas" : "desativadas" toast({ - title: "Permissões relacionadas ativadas", - description: `As permissões de ação relacionadas à rota ${AVAILABLE_ROUTES.find(r => r.id === routeId)?.name} foram ativadas automaticamente.`, + title: `Permissões relacionadas ${action}`, + description: `As permissões de ação relacionadas à rota ${AVAILABLE_ROUTES.find(r => r.id === routeId)?.name} foram ${action} automaticamente.`, }) } } @@ -453,9 +508,25 @@ function UserManagementCard({ user, allForms, onUserUpdate }: UserManagementCard - setPermissionsData({ ...permissionsData, sudo: checked === true }) - } + onCheckedChange={(checked) => { + if (checked === true) { + // Quando sudo é marcado, limpar todas as outras permissões + setPermissionsData({ + ...permissionsData, + sudo: true, + admin_pages: undefined, + accessible_routes: undefined, + content: undefined, + forms: undefined + }); + } else { + // Quando sudo é desmarcado, manter as permissões existentes + setPermissionsData({ + ...permissionsData, + sudo: false + }); + } + }} />