Солидус Админланд
Это пре-альфа-этап, и в будущем его могут изменить.
Это начинается как забавный проект для внутренних целей по созданию более надежной версии панели администратора Solidus_backend. Solidus имеет отличный основной компонент и встроенный интерфейс администратора, но, по нашему мнению и из-за наших настроек, драгоценному камню администратора не хватает структуры дизайна, чтобы быть реальной вспомогательной инфраструктурой для взаимодействия со структурой Solidus_core.
Функции
- Красивый и простой в использовании (UX имеет значение)
- Hotwire Turbo с питанием ⚡️
- Стимул с картами импорта для мелких блесток
- Фильтрация стала проще с Ransack
- Пакетные операции, такие как уничтожение
Зачем переписывать колесо?
Как уже было сказано, по нашему мнению, Solidus_backend ретранслирует множество предостережений о привязке к библиотекам, выбранным обратно в развилку веселья (Deface, я смотрю на вас!), И эта структура слишком строга к этому выбору:
- Многие фильтры с ransack путаются с дайджестом пользовательских параметров.
- Использование Cancan с «макросами» (:manage, :admin), а не с реальными маршрутами CRUD и без соблюдения соглашений шаблона MVC.
- Редактирование продуктов, заказов и рекламных акций основано на Ajax с магистральной сетью, а не на более традиционном поведении CRUD.
- Не «действительно» турбо-совместимо: Turbolinks развивается в режиме горячего подключения, и текущее использование представляет собой лишь фрагмент для правильного выполнения сценариев Javascript.
- Интенсивное использование JavaScript для удаленного выполнения рельсов-ujs и «remote: true» вместо более чистого и предсказуемого ответа HTML с турбо. Я думаю, что удаленный доступ — не лучший подход, поскольку он внедряет код JavaScript в консоль браузера в надежде на его выполнение и, на мой взгляд, представляет собой потенциальную угрозу безопасности перекрестного скриптинга.
Как видите, Solidus_admin довольно старый, а что касается обновления Solidus_frontend с помощью Solidus_starter_frontend, пришло время для серьезного эксперимента и обновления!
Вы пытаетесь создать новый драгоценный камень Solidus_backend?
Вроде как, но нет . Я начинаю это как альтернативный проект, прежде всего, потому что это альфа-проект, и его цель состоит в том, чтобы предложить наряду с включенным в батарею бэкэндом с низкой связью с платформой рельсов, а также довольно структурированную структуру Adminland для расширяемости и настройки пользовательского интерфейса без головной боли. . Я хочу, чтобы он больше полагался на библиотеку, выбранную владельцем хост-проекта, как на простую интеграцию без слишком строгих требований.
Хорошо, так какой у тебя выбор? Вы тоже авторитетны?
Я думаю, мы могли бы подумать о том, чтобы структура кода административной области учитывала эти основы:
- Быть простым в переопределении и расширяться с меньшим количеством переопределений/обезьяньих патчей. Мы люди, а не обезьяны!
- Предварительный бан за Дефейс. Мне никогда не нравился подход к дефейсу, и я думаю, что лучше с самого начала рассматривать пользовательский интерфейс как модульный, альтернативно переопределяя представления путем копирования, а не путем исправления и внедрения. Для возможности расширения другого дополнительного инструмента (всех расширений Solidus с разделами администратора) я предпочитаю сделать более понятную и доступную точку добавления.
- Строгое соблюдение маршрутов CRUD. Все должно опираться на максимально строгие маршруты CRUD, а также на подход вложенных маршрутов, в пользу соглашения, а не подхода к настройке.
- Добавлять внешние ресурсы из приложения Rails хостинга следует с помощью шаблона генератора шаблонов.
Имея это в виду, я начал выбирать некоторые варианты для «нового» проекта Solidus_adminland, такие как:
- hotwire по умолчанию и поощрять нечто большее, чем просто манипулирование JS DOM.
- стимул для простых и надежных дополнений, таких как средства выбора, маска ввода и проверка форм.
- использование драгоценного камня view_comComponent для инкапсуляции вспомогательных методов с результатом HTML (например, link_to или более сложных). Также проще для переопределения, в качестве альтернативы партиалам для надежности и классу PORO для логики пользовательского интерфейса.
- Каждый импорт ресурсов выполняется с помощью Rails-importmap для «отсутствия подхода, ориентированного на Javascript».
- Использование административного драгоценного камня для разделения задач между представлением (с классом *Dashboard) и маршрутами CRUD для отображения или отправки данных.
- Все формы стилизованы с помощью FormBuilder, где каждое поле отображается с помощью отдельного класса Component. Если в функции мы или кто-то хотим добавить какое-то странное поле, такое как Dropdown JS, это можно сделать с помощью нового Admininstrate::Field, FormBuilder::Component и стимула для js sparkle?
- Что касается политики, я думаю, что мы могли бы сделать гибридный подход совместимым с канканом, но с более простым подходом пудит. В нашем случае мы используем гем action_policy. Он основан на объекте PORO, где мы можем определить для каждого действия правила, по которым оно должно выполняться. Это настоящая промежуточная часть контроллеров для политики управления «областью записи», «параметрами, разрешенными для записи» и «доступными для записи маршрутами».
Как видите, для каждого ресурса есть:
- Контроллер с тем же именем для стандартных операций CRUD
- Панель мониторинга с тем же именем для index, new_form, edit_form и параметров отображения для отображения
- Политика, определяющая, к какой области действия текущего пользователя я могу получить доступ, какие параметры я могу отправить и какой маршрут мне разрешен для этого ресурса.
... и в качестве «традиционного» подхода вы можете просто создать свою собственную (или расширить) из этих трех и разместить свою бизнес-логику так, как вам нравится (или того требует ваше приложение)!
Первоначальный дизайн выполнен с помощью начальной загрузки 5 с Tabler, но вы можете легко переопределить стандартные представления из администратора/приложения для CRUD. Количество просмотров будет оставаться максимально низким.
Дорожная карта
Все права на логотипы и цвета получены из пресс-кита Solidus. Тема администратора вдохновлена макетами веб-сайтов Solidus и основана на версии Tabler Bootstrap 5.