Почему стандартные роли Directus не подходят?
При интеграции Directus с редакционным порталом на 50 пользователей (10 редакторов, 5 авторов, 2 администратора) мы зафиксировали 3 случая потери данных за первую неделю: авторы случайно удаляли черновики коллег, а публичный API отдавал неопубликованные статьи. Стандартные роли Administrator и Public не покрывали наш кейс. Как отмечает документация Directus, гибкость системы позволяет настраивать права на любом уровне — от поля до записи. Прямое сравнение со Strapi показывает, что настройка гранулярных разрешений в Directus занимает в 3 раза меньше времени, а грамотная конфигурация снижает затраты на поддержку на 25–40%. Для клиентов с похожей архитектурой экономия бюджета достигает 30-40% ежегодных затрат. В этой статье разберём полный цикл настройки — от Admin UI до SDK — с реальными примерами кода.
Directus security: почему это важно?
Безопасность Directus напрямую зависит от корректной ролевой модели. Типовые ошибки — лишние права на чтение, отсутствие фильтрации по статусу, открытые внутренние поля. Их исправление снижает TCO на 20-30%.
Типичные проблемы при типовой настройке
- Редактор удаляет чужие записи — не хватает item-level restrictions по полю
user_created. - Автор видит внутренние заметки — отсутствуют field-level permissions, скрывающие поле
internal_notes. - Публичный API отдаёт черновики — Public роль настроена без фильтра
status=published. - Администраторы тратят 2–3 часа на ручное проставление прав для 10 ролей — отсутствует программное управление через SDK.
Настройка гранулярных разрешений: Admin UI и SDK
Как настроить роли через Admin UI?
В панели администратора перейдите в Settings → Roles & Permissions, нажмите 'Create Role'. Укажите название, отметьте app_access (доступ к админке) и admin_access (полные права). Для обычных ролей admin_access = false. Для коллекции articles настройте разрешения для каждого действия. Используйте field-level ограничения, чтобы скрыть поле internal_notes. Для item-level добавьте фильтр user_created = $CURRENT_USER.
Программное управление ролями через SDK: пошагово
SDK ускоряет развёртывание в 5 раз по сравнению с ручной настройкой. Пошаговая инструкция:
- Установите
@directus/sdkи подключите модули REST и аутентификации. - Авторизуйтесь под администратором:
directus.login(ADMIN_EMAIL, ADMIN_PASSWORD). - Создайте роль через
createRoleс указаниемname,admin_access,app_access. - Для каждой коллекции создайте разрешения через
createPermission. - Примените конфигурацию, протестируйте через REST API.
Пример на TypeScript:
Пример настройки SDK (нажмите, чтобы развернуть)
import { createDirectus, rest, authentication, createRole, createPermission } from '@directus/sdk' const directus = createDirectus(DIRECTUS_URL).with(rest()).with(authentication()) await directus.login(ADMIN_EMAIL, ADMIN_PASSWORD) const editorRole = await directus.request(createRole({ name: 'Editor', admin_access: false, app_access: true, })) await directus.request(createPermission({ role: editorRole.id, collection: 'articles', action: 'read', })) await directus.request(createPermission({ role: editorRole.id, collection: 'articles', action: 'create', })) await directus.request(createPermission({ role: editorRole.id, collection: 'articles', action: 'update', permissions: { user_created: { _eq: '$CURRENT_USER' } }, fields: ['*'], })) Что такое field-level и item-level permissions?
Field-level permissions ограничивают поля: для роли Author разрешите только id, title, slug, content, status. Item-level permissions фильтруют записи: Editor видит опубликованные статьи и свои черновики через условие _or: [{ status: 'published' }, { user_created: '$CURRENT_USER' }].
Public роль и статические токены
Для публичного API настройте Public роль с разрешением на чтение только опубликованных записей и минимальным набором полей: id, title, slug, publishedAt. Для серверных запросов удобно использовать статический токен: создайте пользователя с ролью API Client и ограниченными правами. Токен передаётся в заголовке Authorization. Подробнее — в Directus Documentation on Static Tokens.
Сравнение подходов и типичные ошибки
Сравнение Admin UI и SDK
| Критерий | Admin UI | SDK |
|---|---|---|
| Скорость настройки 10 ролей | 2–3 часа | 15 минут |
| Повторяемость | Ручная, подвержена ошибкам | Автоматизирована, CI/CD |
| Масштабирование | Трудоёмко при 50+ коллекциях | Простота через циклы |
| Контроль версий | Нет | Да (Git) |
| Обучение команды | Низкий порог входа | Требует разработчика |
Сравнение уровней разрешений
| Уровень | Что ограничивает | Пример |
|---|---|---|
| Field-level | Конкретные поля коллекции | Скрыть internal_notes для Author |
| Item-level | Отдельные записи | Показать только user_created == $CURRENT_USER |
Как избежать типичных ошибок?
Всегда добавляйте item-level фильтр user_created на delete, иначе редактор удалит статью коллеги. Для Public-роли ограничьте поля минимальным набором — не открывайте internal_notes. Используйте SDK для автоматизации, чтобы исключить человеческий фактор.
Процесс работы и сроки
Что входит в настройку прав доступа
- Анализ бизнес-ролей и сущностей (до 10 ролей).
- Создание ролей с гранулярными permissions (field-level и item-level).
- Настройка фильтров для публичного API.
- Документирование ролевой модели.
- Тестирование всех сценариев (CRUD, публичный API).
- Обучение двух администраторов.
Ориентировочные сроки
Для редакционной команды (3–5 ролей) настройка занимает от 1 до 2 дней. Для сложных проектов с десятками коллекций — до 5 дней. Стоимость рассчитывается индивидуально. Наша команда имеет опыт работы с Directus более 5 лет, реализовано 30+ проектов. Закажите аудит текущей конфигурации прав доступа или свяжитесь с нами для консультации — поможем настроить оптимальную ролевую модель.







