Налаштування ролей та прав доступу Directus
Directus використовує ролеву модель доступу. Кожному користувачу присвоюється роль, роль отримує набір дозволів на колекції: читання, створення, оновлення, видалення. Дозволи можуть бути повними або умовними (тільки власні записи, тільки конкретні поля).
Ролі
У Settings → Roles & Permissions → створіть роль:
- Administrator — повний доступ (вбудована)
- Public — неаутентифіковані запити (вбудована)
- Editor — управління контентом
- Author — тільки власні матеріали
- API Client — тільки читання для зовнішнього фронтенду
Програмне управління ролями
// Через Directus 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',
// null = усі записи
}))
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: ['*'], // усі поля
}))
Дозволи на рівні полів
// Тільки певні поля доступні для читання
await directus.request(createPermission({
role: authorRoleId,
collection: 'articles',
action: 'read',
fields: ['id', 'title', 'slug', 'content', 'status'],
// Приховані поля: internal_notes, revenue_impact
}))
Дозволи на рівні записів з фільтром
// Редактор бачить тільки опубліковані статті плюс власні чернетки
await directus.request(createPermission({
role: editorRoleId,
collection: 'articles',
action: 'read',
permissions: {
_or: [
{ status: { _eq: 'published' } },
{ user_created: { _eq: '$CURRENT_USER' } },
],
},
}))
Public роль (для публічного API)
// Публічне читання опублікованих статей
await directus.request(createPermission({
role: null, // null = Public роль
collection: 'articles',
action: 'read',
permissions: { status: { _eq: 'published' } },
fields: ['id', 'title', 'slug', 'content', 'publishedAt', 'thumbnail'],
}))
Статичний токен для серверних запитів
# Admin → Users → виберіть користувача → Token поле
# Створіть користувача з роллю "API Client" (тільки читання)
# Задайте статичний токен
// Використання статичного токена
const response = await fetch(`${DIRECTUS_URL}/items/articles?filter[status][_eq]=published`, {
headers: { Authorization: `Bearer ${STATIC_TOKEN}` },
})
Терміни
Налаштування системи ролей для редакційної команди (3–5 ролей) — 0,5–1 день.







