<small>Предыдущие статьи:

- ➡️ [Раздел 08. Соглашение о хранилище данных](/docs/08-database)
- ➡️ [Раздел 09. Параметризация](/docs/09-parametrization)
- ➡️ [Раздел 10. Мультипроектность](/docs/10-multiproject)
</small>
# SLOT-H: Модуль Base

Модуль Base является ядром экосистемы и неотъемлемой частью системы. Он не может быть удалён или заменён, так как обеспечивает базовую функциональность, необходимую для работы любого проекта.

---

## Состав модуля

Модуль Base включает следующие компоненты:

### Пользователи и аутентификация

Управление пользователями, их регистрация, авторизация и восстановление доступа. Хранение данных о пользователях, их ролях и правах.

### Роли и права

Иерархическая система ролей с возможностью наследования прав. Каждая роль может иметь родительскую роль, от которой наследуются права. Права назначаются как ролям, так и отдельным пользователям.

### Очереди задач

Система фоновых задач для асинхронной обработки. Поддерживается отправка писем, обработка изображений, создание дампов базы данных и другие типы задач. Очередь работает через CLI-воркер, запускаемый по cron.

### Логирование

Логирование действий пользователей и системных событий. Логируются входы в систему, просмотры страниц, изменения данных, создание и удаление записей.

### Константы

Динамические константы, хранящиеся в базе данных. Позволяют изменять настройки системы без редактирования файлов и перезагрузки сервера.

### Короткие ссылки

Управление короткими URL-адресами для страниц проекта. Позволяет создавать человеко-читаемые адреса вместо стандартных `module/controller/action`.

### Файлы и изображения

Управление загруженными файлами и изображениями. Поддерживается обработка изображений: изменение размера, создание превью, оптимизация.

### Статические файлы

Управление версиями CSS и JS файлов через хеширование. Автоматическое обновление версий при изменении файлов для сброса кеша браузера.

### Уведомления

Система уведомлений пользователей о событиях. Поддерживаются различные типы уведомлений, включая системные оповещения.

---

## Таблицы модуля Base

- `aliases` - короткие ссылки на страницы
- `auth_checks` - попытки авторизации
- `brutus` - попытки несанкционированного доступа
- `constants` - системные и пользовательские константы
- `entities` - уникальные идентификаторы сущностей
- `icons` - SVG-иконки
- `person_actives` - онлайн-статус пользователей
- `person_alerts` - уведомления пользователей
- `person_logs` - логи действий пользователей
- `person_privates` - аутентификационные данные пользователей
- `person_protecteds` - дополнительные данные пользователей
- `person_roles` - связь пользователей с ролями
- `person_rules` - связь пользователей с правами
- `persons` - пользователи
- `project_languages` - языки проекта
- `projects` - проекты
- `queues` - задачи очереди
- `role_roles` - иерархия ролей
- `role_rules` - права ролей
- `roles` - роли
- `rules` - права
- `static_files` - хеши статических файлов
- `t_texts` - переводы текстов
- `texts` - статические тексты
- `tkeys` - ключи переводов
- `tvalues` - значения переводов

---

## Структура модуля

```
Modules/Base/
├── Bootstrap.php          # Загрузка модуля
├── Crud.php               # Права доступа
├── Preloader.php          # Предзагрузка
├── Controllers/           # Контроллеры
│   └── Cli.php            # CLI-контроллер (очереди, демон)
├── Models/                # Модели данных
│   ├── DbTables/          # Описание таблиц
│   │   ├── Alias.php
│   │   ├── Person.php
│   │   ├── Role.php
│   │   ├── Queue.php
│   │   └── ...
│   └── (модели)
```
---

## Особенности

Модуль Base не имеет собственного интерфейса в публичной части. Его функциональность используется другими модулями через вызовы моделей и контроллеров.

CLI-контроллер модуля Base запускает фоновые задачи и обслуживает очередь. Он не предназначен для вызова через веб-интерфейс.

Все таблицы модуля Base, требующие изоляции данных, используют `project_id` для разделения проектов.

Модуль Base подключается автоматически при инициализации системы и не требует дополнительной настройки. Все его компоненты доступны через стандартные механизмы ядра.

---

## Что дальше?

- ➡️ [Раздел 12. Модуль Free](/docs/12-module-free)
- ➡️ [Раздел 13. Модуль Geo](/docs/13-module-geo)
- ➡️ [Раздел 14. Создание модуля](/docs/14-module-custom)
