import React, { useState } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import { Users, UserPlus, Shield, Settings, Mail, Activity } from 'lucide-react'; import { UsersTable } from '@/components/users/UsersTable'; import { PendingUsersTable } from '@/components/users/PendingUsersTable'; import { FunctionsManager } from '@/components/users/FunctionsManager'; import { PrivilegesManager } from '@/components/users/PrivilegesManager'; import { PasswordResetRequests } from '@/components/users/PasswordResetRequests'; import { SessionLogsSimple } from '@/components/users/SessionLogsSimple'; import { UserModal } from '@/components/users/UserModal'; import { useUserManagement, UserProfile } from '@/hooks/useUserManagement'; import { usePermissionControl } from '@/hooks/usePermissionControl'; const UserManagement = () => { const [isUserModalOpen, setIsUserModalOpen] = useState(false); const [selectedUser, setSelectedUser] = useState(null); const [activeTab, setActiveTab] = useState('users'); const { canView, canCreate, canEdit, canDelete, canAdmin, isDisabled, canInteractWithSpecialMenus } = usePermissionControl(); const { users, pendingUsers, functions, privileges, createUser, approveUser, rejectUser, createFunction, updateFunction, deleteFunction, createPrivilege: createPrivilegeBase, updatePrivilege: updatePrivilegeBase, deletePrivilege, updateUser, toggleUserStatus, deleteUser, canDeleteUser, getUserDependencies } = useUserManagement(); // Verificar se pode acessar esta página - somente admins ou usuários com permissões especiais if (!canView() || !canInteractWithSpecialMenus()) { return (
🔒

Acesso Negado

Você não tem permissão para acessar o gerenciamento de usuários.

); } // Wrapper functions to match expected signatures const createPrivilege = async (data: { name: string; description?: string; permissions: Record }): Promise => { await createPrivilegeBase(data); }; const updatePrivilege = async (id: string, data: { name: string; description?: string; permissions: Record }): Promise => { await updatePrivilegeBase(id, data); }; const handleEditUser = (user: UserProfile) => { if (!canEdit()) return; setSelectedUser(user); setIsUserModalOpen(true); }; const handleCreateUser = () => { if (!canCreate()) return; setSelectedUser(null); setIsUserModalOpen(true); }; const handleToggleStatus = (userId: string) => { if (!canEdit()) return; const user = users.find(u => u.id === userId); if (user) { toggleUserStatus(userId, user.status); } }; const handleDeleteUser = async (userId: string, replaceReferences: boolean = false) => { if (!canDelete()) return; return await deleteUser(userId, replaceReferences); }; const handleApproveUser = (userId: string) => { if (!canEdit()) return; approveUser(userId); }; const handleRejectUser = (userId: string) => { if (!canDelete()) return; rejectUser(userId); }; const handleSaveUser = (userId: string, data: Partial) => { if (!canEdit()) return; updateUser(userId, data); setSelectedUser(null); setIsUserModalOpen(false); }; const handleCreateNewUser = async (data: { email: string; full_name?: string; function_id?: string; privilege_id?: string; }) => { if (!canCreate()) return; try { await createUser(data); setIsUserModalOpen(false); } catch (error) { // Error is already handled in the hook } }; const handleCloseModal = () => { setSelectedUser(null); setIsUserModalOpen(false); }; return (

Usuários e Privilégios

Gerenciamento de usuários, funções e privilégios do sistema

{canCreate() && ( )}
Usuários Users {canEdit() && ( Pendentes Pend )} {canAdmin() && ( Redefinições Reset )} {canEdit() && ( Funções Func )} {canEdit() && ( Privilégios Priv )} {canView() && ( Logs de Sessão Logs )} Usuários Ativos
{canEdit() && ( Usuários Pendentes
)} {canAdmin() && ( )} {canEdit() && ( Gerenciar Funções )} {canEdit() && ( Gerenciar Privilégios )} {canView() && ( )}
{isUserModalOpen && ( )}
); }; export default UserManagement;