import { useState, useEffect } from 'react'; import { Users as UsersIcon, Trash2, Shield, User } from 'lucide-react'; import axios from 'axios'; import { API_URL } from '../config'; export default function Users({ token, onViewProfile }) { const [users, setUsers] = useState([]); const [servers, setServers] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { loadData(); }, []); const loadData = async () => { try { const [usersRes, serversRes] = await Promise.all([ axios.get(`${API_URL}/api/users`, { headers: { Authorization: `Bearer ${token}` } }), axios.get(`${API_URL}/api/servers`, { headers: { Authorization: `Bearer ${token}` } }) ]); setUsers(usersRes.data); setServers(serversRes.data); } catch (error) { console.error('Ошибка загрузки данных:', error); } finally { setLoading(false); } }; const toggleServerAccess = async (username, serverName) => { const user = users.find(u => u.username === username); const currentServers = user.servers || []; const newServers = currentServers.includes(serverName) ? currentServers.filter(s => s !== serverName) : [...currentServers, serverName]; try { await axios.put( `${API_URL}/api/users/${username}/servers`, { servers: newServers }, { headers: { Authorization: `Bearer ${token}` } } ); loadData(); } catch (error) { alert(error.response?.data?.detail || 'Ошибка обновления доступа'); } }; const changeRole = async (username, newRole) => { try { await axios.put( `${API_URL}/api/users/${username}/role`, { role: newRole }, { headers: { Authorization: `Bearer ${token}` } } ); loadData(); } catch (error) { alert(error.response?.data?.detail || 'Ошибка изменения роли'); } }; const deleteUser = async (username) => { if (!confirm(`Удалить пользователя ${username}?`)) { return; } try { await axios.delete(`${API_URL}/api/users/${username}`, { headers: { Authorization: `Bearer ${token}` } }); loadData(); } catch (error) { alert(error.response?.data?.detail || 'Ошибка удаления пользователя'); } }; if (loading) { return (
Загрузка...
); } return (

Управление пользователями

{users.map((user) => (
{user.role === 'admin' ? ( ) : ( )}

{user.role === 'admin' ? 'Администратор' : user.role === 'support' ? 'Тех. поддержка' : user.role === 'banned' ? 'Забанен' : 'Пользователь'}

{user.role === 'user' && (

Доступ к серверам:

{servers.map((server) => { const hasAccess = user.servers?.includes(server.name); return ( ); })} {servers.length === 0 && (

Нет доступных серверов

)}
)} {user.role === 'admin' && (

Администратор имеет доступ ко всем серверам

)} {user.role === 'support' && (

Тех. поддержка имеет доступ к системе тикетов

)} {user.role === 'banned' && (

⛔ Пользователь заблокирован и не имеет доступа к панели

)}
))}
); }