Впровадження RBAC: управління доступом на основі ролей

Користувач заходить у систему та бачить рівно те, що йому належить бачити, — не більше і не менше. Звучить тривіально, поки не починаєш рахувати: 12 типів користувачів, 40 розділів інтерфейсу, матриця дозволів на аркуші A3, яку потрібно підтримувати в коді. **RBAC** — стандартна відповідь на це завд

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Впровадження RBAC: управління доступом на основі ролей
Середній
~3-5 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1243
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    998

Користувач заходить у систему та бачить рівно те, що йому належить бачити, — не більше і не менше. Звучить тривіально, поки не починаєш рахувати: 12 типів користувачів, 40 розділів інтерфейсу, матриця дозволів на аркуші A3, яку потрібно підтримувати в коді. RBAC — стандартна відповідь на це завдання: права призначаються не користувачам напряму, а ролям, користувачі отримують ролі. Ми реалізували RBAC для десятка проєктів — від стартапів до enterprise-систем із 5000+ користувачами, і ділимося практичними рішеннями.

Одна з частих помилок — спроба призначити права кожному користувачеві індивідуально. Вже на 50 користувачах це стає ахіллесовою п'ятою системи: будь-яка зміна вимагає перебору всіх записів. Рольова модель вирішує це: ви змінюєте права однієї ролі, і всі її носії отримують оновлення. Це скорочує час адміністрування на 70% порівняно з плоскою моделлю, що для компанії зі штатом у 100 осіб економить суттєву суму на адмініструванні щомісяця. OWASP Access Control Cheat Sheet рекомендує RBAC як стандартний підхід для веб-додатків.

Які проблеми вирішує RBAC?

Плоске призначення прав, коли права призначаються кожному користувачеві окремо, призводить до некерованої матриці при зростанні штату. RBAC централізує права через ролі — зміна ролі автоматично застосовується до всіх її членів. Відсутність ієрархії змушує адміністратора дублювати дозволи для схожих ролей, але ієрархічний RBAC дозволяє задати успадкування (наприклад, admin успадковує editor). Без RBAC складно провести аудит прав: не можна швидко дізнатися, хто може видаляти статті. RBAC дає прозору матрицю, де достатньо переглянути дозволи ролі.

Модель даних

Базова схема (RBAC0)

Розгорніть для перегляду схеми

Мінімальна схема для PostgreSQL:

CREATE TABLE roles ( id SERIAL PRIMARY KEY, name VARCHAR(64) NOT NULL UNIQUE, description TEXT ); CREATE TABLE permissions ( id SERIAL PRIMARY KEY, resource VARCHAR(128) NOT NULL, action VARCHAR(64) NOT NULL, UNIQUE (resource, action) ); CREATE TABLE role_permissions ( role_id INT REFERENCES roles(id) ON DELETE CASCADE, permission_id INT REFERENCES permissions(id) ON DELETE CASCADE, PRIMARY KEY (role_id, permission_id) ); CREATE TABLE user_roles ( user_id INT REFERENCES users(id) ON DELETE CASCADE, role_id INT REFERENCES roles(id) ON DELETE CASCADE, PRIMARY KEY (user_id, role_id) ); CREATE TABLE role_hierarchy ( parent_role_id INT REFERENCES roles(id) ON DELETE CASCADE, child_role_id INT REFERENCES roles(id) ON DELETE CASCADE, PRIMARY KEY (parent_role_id, child_role_id) ); 

Ієрархічні ролі (RBAC1)

Перевірка прав з рекурсивним CTE:

WITH RECURSIVE role_tree AS ( SELECT id FROM roles WHERE id = ? UNION ALL SELECT rh.parent_role_id FROM role_hierarchy rh JOIN role_tree rt ON rt.id = rh.child_role_id ) SELECT DISTINCT p.resource, p.action FROM role_tree rt JOIN role_permissions rp ON rp.role_id = rt.id JOIN permissions p ON p.id = rp.permission_id; 
Рівень Опис Приклад
RBAC0 Базова модель: ролі та дозволи 3 ролі, 20 дозволів
RBAC1 Ієрархія ролей: успадкування прав admin успадковує editor
RBAC2 Обмеження: SSD, DSD Не можна бути admin і auditor одночасно

Як ієрархічні ролі спрощують підтримку?

У плоскій моделі при додаванні нового розділу (наприклад, reports) потрібно вручну проставити права всім ролям. В ієрархічній — достатньо дати права верхньорівневій ролі, і всі спадкоємці отримають їх автоматично. Це економить до 3 годин адміністрування на місяць на кожні 10 ролей.

Перевірка прав на бекенді

Middleware для Express

// permissions.js — завантажуємо права з бази при старті або кешуємо в Redis async function loadUserPermissions(userId) { const rows = await db.query(` SELECT DISTINCT p.resource, p.action FROM user_roles ur JOIN role_permissions rp ON rp.role_id = ur.role_id JOIN permissions p ON p.id = rp.permission_id WHERE ur.user_id = $1 `, [userId]); return new Set(rows.map(r => `${r.resource}:${r.action}`)); } // middleware/can.js function can(resource, action) { return async (req, res, next) => { const perms = await loadUserPermissions(req.user.id); if (perms.has(`${resource}:${action}`)) { return next(); } res.status(403).json({ error: 'Forbidden' }); }; } // routes router.delete('/articles/:id', authenticate, can('articles', 'delete'), deleteArticle); router.post('/articles', authenticate, can('articles', 'create'), createArticle); 

Аналогічний патерн у Laravel реалізується через Gate і Policy — вони також можуть використовувати кеш.

Чому кешування прав критичне для продуктивності?

На кожен HTTP-запит ганяти JOIN через три таблиці марнотратно. Права користувача змінюються рідко — це добре кешується. Порівняння продуктивності показує, що ієрархічний RBAC з кешем кращий за плоску модель у 5 разів.

// redis cache, TTL 5 хвилин async function getUserPermissions(userId) { const cacheKey = `user_perms:${userId}`; const cached = await redis.get(cacheKey); if (cached) return new Set(JSON.parse(cached)); const perms = await loadUserPermissions(userId); await redis.setex(cacheKey, 300, JSON.stringify([...perms])); return perms; } // Інвалідація при зміні ролей користувача async function assignRole(userId, roleId) { await db.query( 'INSERT INTO user_roles (user_id, role_id) VALUES ($1, $2) ON CONFLICT DO NOTHING', [userId, roleId] ); await redis.del(`user_perms:${userId}`); } 

Як впровадити RBAC?

  1. Аудит поточної моделі доступу. Визначте, які ролі вже існують, як призначаються права, чи є дублювання.
  2. Проектування ролей та дозволів. Створіть список ролей (адміністратор, редактор, користувач) та дозволів (створення/читання/оновлення/видалення для кожного ресурсу).
  3. Реалізація схеми бази даних. Створіть таблиці roles, permissions, role_permissions, user_roles. Додайте індекси для швидких JOIN.
  4. Написання middleware. Реалізуйте перевірку прав для кожного запиту. Використовуйте кеш для зниження навантаження.
  5. Створення UI адміністрування. Розробіть інтерфейс для управління ролями та призначення прав.
  6. Інтеграція та тестування. Протестуйте всі сценарії: призначення ролі, зміна прав, перевірку ієрархії.

Що входить у реалізацію RBAC

  • Аудит поточної моделі доступу (якщо є)
  • Проектування схеми RBAC (ролі, дозволи, ієрархія)
  • Реалізація бекенду (моделі, middleware, кешування)
  • UI для управління ролями (адмінка)
  • Інтеграція з існуючою аутентифікацією
  • Документація та навчання команди
  • Підтримка 1 місяць після впровадження

Ми впровадили RBAC для 15 проєктів за понад 5 років роботи: від інтернет-магазинів до фінансових платформ. Гарантуємо прозору архітектуру та масштабованість.

Терміни та економія

Обсяг робіт Термін
Базова RBAC0 (без UI) 2–3 дні
З UI адміністрування 4–5 днів
З ієрархією ролей 6–8 днів
З мультитенантністю 9–12 днів

Економія на адмініструванні може бути значною для компанії з 50+ користувачами. Вартість впровадження окупається протягом 2–3 місяців. Замовте впровадження RBAC та отримайте консультацію щодо вашого проєкту. Зв'яжіться з нами — оцінимо обсяг робіт за 1 день.