Роли и права доступа в Strapi
Strapi использует два механизма доступа: Users & Permissions (для публичных пользователей API) и Role-Based Access Control (для администраторов в admin panel). Настройка через GUI в Settings → Roles или программно.
Users & Permissions (публичный API)
Плагин users-permissions управляет токенами, ролями публичных пользователей:
Встроенные роли:
-
Public— неаутентифицированные запросы -
Authenticated— авторизованные через JWT
# Получить JWT токен
POST /api/auth/local
{ "identifier": "[email protected]", "password": "password" }
# Ответ: { "jwt": "...", "user": {...} }
# Запрос с токеном
GET /api/articles
Authorization: Bearer <jwt-token>
Настройка прав через API:
// Программная настройка прав при bootstrap
async bootstrap({ strapi }) {
const publicRole = await strapi.query('plugin::users-permissions.role')
.findOne({ where: { type: 'public' } })
// Разрешить публичное чтение статей
await strapi.query('plugin::users-permissions.permission').updateMany({
where: { role: publicRole.id, action: 'api::article.article.find' },
data: { enabled: true },
})
}
Кастомная роль
// Создать роль через Admin: Settings → Roles → Add new role
// Или программно:
const role = await strapi.query('plugin::users-permissions.role').create({
data: {
name: 'Premium User',
description: 'Пользователь с доступом к premium контенту',
type: 'premium',
},
})
Admin Panel RBAC
Для администраторов — отдельная система ролей:
Встроенные роли admin:
-
Super Admin— полный доступ -
Editor— управление контентом -
Author— только свои записи
// Программное создание admin роли
const editorRole = await strapi.query('admin::role').create({
data: {
name: 'Content Manager',
description: 'Управление только статьями и категориями',
},
})
// Назначить права
await strapi.admin.services.permission.assignPermissions(editorRole.id, [
{ action: 'plugin::content-manager.explorer.read', subject: 'api::article.article' },
{ action: 'plugin::content-manager.explorer.create', subject: 'api::article.article' },
{ action: 'plugin::content-manager.explorer.update', subject: 'api::article.article' },
])
Field-level permissions
// Ограничить доступ к конкретным полям
await strapi.admin.services.permission.assignPermissions(roleId, [
{
action: 'plugin::content-manager.explorer.read',
subject: 'api::article.article',
properties: {
fields: ['title', 'content', 'publishedAt'], // только эти поля
},
},
])
API Tokens (для серверных запросов)
# Admin → Settings → API Tokens → Create new API Token
# Type: Read-only / Full access / Custom
// Использование
GET /api/articles
Authorization: Bearer <api-token>
Сроки
Настройка ролей для редакционной команды (3–4 роли с разными уровнями доступа) — 0,5–1 день.







