Настройка ролей и прав доступа 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, // доступ к admin panel
}))
// Назначить разрешения
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: ['*'], // все поля
}))
Field-level permissions
// Только определённые поля доступны для чтения
await directus.request(createPermission({
role: authorRoleId,
collection: 'articles',
action: 'read',
fields: ['id', 'title', 'slug', 'content', 'status'],
// Скрытые поля: internal_notes, revenue_impact
}))
Item-level permissions с фильтром
// Редактор видит только опубликованные статьи плюс свои черновики
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'],
}))
Static Token для серверных запросов
# Admin → Users → выбрать пользователя → Token поле
# Создать пользователя с ролью "API Client" (только чтение)
# Задать статический токен
// Использование static token
const response = await fetch(`${DIRECTUS_URL}/items/articles?filter[status][_eq]=published`, {
headers: { Authorization: `Bearer ${STATIC_TOKEN}` },
})
Сроки
Настройка системы ролей для редакционной команды (3–5 ролей) — 0,5–1 день.







