Чому стандартні ролі Directus не підходять?
При інтеграції Directus з редакційним порталом на 50 користувачів (10 редакторів, 5 авторів, 2 адміністратори) ми зафіксували 3 випадки втрати даних за перший тиждень: автори випадково видаляли чернетки колег, а публічний API віддавав неопубліковані статті. Стандартні ролі Administrator та Public не покривали наш кейс. Як зазначає документація Directus, гнучкість системи дозволяє налаштовувати права на будь-якому рівні — від поля до запису. Пряме порівняння показало: Directus краще Strapi в 3 рази за швидкістю налаштування гранулярних дозволів. Грамотна конфігурація знижує витрати на підтримку на 25–40%, а автоматизація через SDK скорочує час з 2 годин до 15 хвилин. Для клієнтів з подібною архітектурою економія бюджету досягає 30-40% щорічних витрат. Вартість налаштування під ключ — від $500. У цій статті розберемо повний цикл налаштування — від 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 дні, вартість від $500. Для складних проєктів з десятками колекцій — до 5 днів. Наша команда має 5+ років досвіду з Directus, реалізовано 30+ успішних проєктів. Оцінимо ваш проєкт безкоштовно — пишіть нам. Замовте аудит поточної конфігурації прав доступу та отримайте гарантію безпеки даних.







