fix document 500 error and fix users tabel for bot
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
import { useCallback, useEffect, useMemo, useState } from 'react';
|
||||
import { useRouter } from 'next/navigation';
|
||||
import { Ban, BadgeCheck, Crown, FileText, KeyRound, Loader2, Search, ShieldPlus, UserCheck, UserCog } from 'lucide-react';
|
||||
import { Ban, BadgeCheck, Crown, FileText, KeyRound, Loader2, Search, ShieldOff, ShieldPlus, UserCheck, UserCog } from 'lucide-react';
|
||||
import { VerificationBadge } from '@/components/id/verification-badge';
|
||||
import { UserDocumentsDialog } from '@/components/documents/user-documents-dialog';
|
||||
import { AdminShell } from '@/components/id/admin-shell';
|
||||
@@ -12,7 +12,7 @@ import { Button } from '@/components/ui/button';
|
||||
import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog';
|
||||
import { Input } from '@/components/ui/input';
|
||||
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table';
|
||||
import { AdminPermission, AdminRole, AdminUser, apiFetch } from '@/lib/api';
|
||||
import { AdminPermission, AdminRole, AdminUser, adminDisableUserTotp, apiFetch, fetchUserTotpStatus } from '@/lib/api';
|
||||
import { getAdminLandingPath } from '@/lib/admin-access';
|
||||
import { DEFAULT_VERIFICATION_ICON, VERIFICATION_ICON_OPTIONS } from '@/lib/verification-icons';
|
||||
|
||||
@@ -24,6 +24,7 @@ const statusLabels: Record<string, string> = {
|
||||
|
||||
const roleLabels: Record<string, string> = {
|
||||
user: 'Пользователь',
|
||||
bot: 'Бот',
|
||||
admin: 'Администратор',
|
||||
moderator: 'Модератор',
|
||||
manager: 'Менеджер',
|
||||
@@ -274,9 +275,32 @@ export default function AdminUsersPage() {
|
||||
setDialog('verification');
|
||||
}
|
||||
|
||||
async function handleAdminDisableTotp(user: AdminUser) {
|
||||
if (!token || !currentUser?.isSuperAdmin) return;
|
||||
setActionLoading(true);
|
||||
try {
|
||||
const status = await fetchUserTotpStatus(user.id, token);
|
||||
if (!status.isEnabled) {
|
||||
showToast('У пользователя не включена двухфакторная аутентификация');
|
||||
return;
|
||||
}
|
||||
const confirmed = window.confirm(`Отключить 2FA для ${user.displayName}? Пользователю не потребуется код из приложения-аутентификатора.`);
|
||||
if (!confirmed) return;
|
||||
await adminDisableUserTotp(user.id, token);
|
||||
showToast('Двухфакторная аутентификация отключена');
|
||||
} catch (error) {
|
||||
showToast(error instanceof Error ? error.message : 'Не удалось отключить 2FA');
|
||||
} finally {
|
||||
setActionLoading(false);
|
||||
}
|
||||
}
|
||||
|
||||
function renderRoles(user: AdminUser) {
|
||||
if (user.isBot) {
|
||||
return roleLabels.bot;
|
||||
}
|
||||
const userRoles = user.roles ?? [];
|
||||
const extraRoles = userRoles.filter((role) => role !== DEFAULT_USER_ROLE);
|
||||
const extraRoles = userRoles.filter((role) => role !== DEFAULT_USER_ROLE && role !== 'bot');
|
||||
const direct = user.directPermissions ?? [];
|
||||
const labels = user.isSuperAdmin
|
||||
? ['Супер-админ', ...extraRoles.map((role) => roleLabels[role] ?? role)]
|
||||
@@ -357,7 +381,7 @@ export default function AdminUsersPage() {
|
||||
</Button>
|
||||
</>
|
||||
) : null}
|
||||
{currentUser?.canViewUserDocuments ? (
|
||||
{currentUser?.canViewUserDocuments && !user.isBot ? (
|
||||
<Button
|
||||
variant="secondary"
|
||||
size="icon"
|
||||
@@ -368,6 +392,17 @@ export default function AdminUsersPage() {
|
||||
<FileText className="h-4 w-4" />
|
||||
</Button>
|
||||
) : null}
|
||||
{currentUser?.isSuperAdmin && !user.isBot ? (
|
||||
<Button
|
||||
variant="secondary"
|
||||
size="icon"
|
||||
aria-label="Отключить 2FA"
|
||||
disabled={actionLoading}
|
||||
onClick={() => void handleAdminDisableTotp(user)}
|
||||
>
|
||||
<ShieldOff className="h-4 w-4" />
|
||||
</Button>
|
||||
) : null}
|
||||
{currentUser?.canVerifyUsers ? (
|
||||
<Button
|
||||
variant={user.isVerified ? 'default' : 'secondary'}
|
||||
|
||||
Reference in New Issue
Block a user