Разработка административной панели на AdminJS

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Разработка административной панели на AdminJS
Средняя
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Разработка административной панели на AdminJS

AdminJS — open-source фреймворк для Node.js, автоматически генерирующий admin-интерфейс на основе моделей данных. Поддерживает TypeORM, Prisma, Mongoose, Sequelize. Написан на React, хорошо кастомизируется.

Установка и базовая настройка

npm install adminjs @adminjs/express express express-session
npm install @adminjs/typeorm  # или @adminjs/prisma, @adminjs/mongoose
import AdminJS from 'adminjs';
import AdminJSExpress from '@adminjs/express';
import { Database, Resource, getModelByName } from '@adminjs/typeorm';

AdminJS.registerAdapter({ Database, Resource });

const adminJs = new AdminJS({
    resources: [
        {
            resource: getModelByName('User'),
            options: {
                properties: {
                    password: { isVisible: { list: false, edit: false, filter: false, show: false } },
                    createdAt: { isVisible: { edit: false } }
                },
                actions: {
                    delete: { isAccessible: ({ currentAdmin }) => currentAdmin?.role === 'superadmin' }
                }
            }
        },
        {
            resource: getModelByName('Order'),
            options: {
                listProperties: ['id', 'customer', 'status', 'total', 'createdAt'],
                filterProperties: ['status', 'createdAt'],
                sort: { sortBy: 'createdAt', direction: 'desc' }
            }
        }
    ],
    dashboard: {
        component: AdminJS.bundle('./components/Dashboard')
    },
    branding: {
        companyName: 'Мой Магазин',
        logo: '/admin-logo.svg'
    }
});

const router = AdminJSExpress.buildAuthenticatedRouter(adminJs, {
    authenticate: async (email, password) => {
        const admin = await Admin.findOne({ email });
        if (admin && await bcrypt.compare(password, admin.passwordHash)) {
            return admin;
        }
        return null;
    },
    cookiePassword: process.env.COOKIE_SECRET
});

Кастомные компоненты

AdminJS позволяет заменять стандартные компоненты на кастомные React-компоненты:

// components/OrderStatusCell.tsx
import { BasePropertyProps } from 'adminjs';

const OrderStatusCell: React.FC<BasePropertyProps> = ({ record }) => {
    const status = record.params.status;
    const colors = { pending: 'orange', completed: 'green', cancelled: 'red' };

    return <span style={{ color: colors[status] }}>{status}</span>;
};

export default OrderStatusCell;

// В конфигурации ресурса
properties: {
    status: {
        components: { list: AdminJS.bundle('./components/OrderStatusCell') }
    }
}

Кастомные экшены

// Кастомный экшн "Отправить уведомление"
actions: {
    sendNotification: {
        actionType: 'record',
        icon: 'Bell',
        label: 'Уведомить клиента',
        handler: async (request, response, context) => {
            const { record } = context;
            await NotificationService.send(record.params.customerId, 'order_ready');
            return {
                record: record.toJSON(),
                notice: { message: 'Уведомление отправлено', type: 'success' }
            };
        }
    }
}

Загрузка файлов через @adminjs/upload

npm install @adminjs/upload
import uploadFeature from '@adminjs/upload';
import { s3Client } from './s3-client';

{
    resource: getModelByName('Product'),
    features: [
        uploadFeature({
            provider: { aws: { bucket: 'my-bucket', s3Client } },
            properties: {
                file:          'imageFile',
                filePath:      'imageUrl',
                filename:      'imageName',
                mimeType:      'imageMimeType'
            },
            uploadPath: (record, filename) => `products/${record.id()}/${filename}`
        })
    ]
}

Роли и права

const canModifyOrders = ({ currentAdmin }: { currentAdmin: Admin }) =>
    ['superadmin', 'manager'].includes(currentAdmin?.role);

{
    resource: getModelByName('Order'),
    options: {
        actions: {
            edit:   { isAccessible: canModifyOrders },
            delete: { isAccessible: ({ currentAdmin }) => currentAdmin?.role === 'superadmin' }
        }
    }
}

Ограничения AdminJS

  • Сложные custom workflows требуют много кода — теряется преимущество над кастомной панелью
  • Производительность на больших объёмах данных (100k+ записей) требует ручной оптимизации запросов
  • Ограниченные возможности для мобильного отображения

Срок разработки: 2–3 недели для панели с кастомными компонентами, загрузкой файлов и настроенными правами.