Проектування рольової моделі доступу в 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Проектування рольової моделі доступу в 1С-Бітрікс
Середній
~2-3 дні
Часті запитання

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

Етапи розробки

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1356
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    943
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    828
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1073

Типова ситуація: конфлікт прав у Бітрікс

Часто до нас звертаються зі скаргою: менеджер випадково видалив товар, а редактор не бачить свої розділи. У 1С-Бітрікс права доступу — потужний, але складний інструмент. Без системного проектування рольової моделі доступу 1С-Бітрікс ролі призначаються хаотично, виникають конфлікти: користувач входить у кілька груп з різними привілеями, і налагодження займає півдня. Ми проектуємо рольову модель доступу під бізнес-завдання: від аналізу процесів до налаштування кожного модуля. Це виключає ручне перевизначення прав і знижує ризик інцидентів. За час роботи ми виконали понад 50 проєктів з розмежування доступу, типовий проєкт скорочує кількість груп у 3 рази — з 15-20 до 5-7. При цьому матриця прав стає прозорою для замовника та розробника. Проектування рольової моделі доступу в 3 рази ефективніше за хаотичне призначення прав — менше конфліктів і простоїв. Економія на підтримці складає до 5000 грн на місяць.

Як влаштована система прав у 1С-Бітрікс?

Платформа працює з трьома рівнями доступу:

  • Групи користувачів — базова одиниця. Права призначаються групі, а не конкретному користувачеві. Користувач може входити в кілька груп; фінальні права обчислюються за максимумом серед усіх груп.
  • Права на модулі — кожен модуль (iblock, catalog, sale, crm, im тощо) має власний реєстр прав. Наприклад, модуль iblock знає про права iblock_read, iblock_edit, iblock_admin. Це не глобальні константи — кожен модуль визначає свої.
  • Права на об'єкти — інфоблоки, розділи, елементи можуть мати точкові обмеження через CIBlock::SetPermission() або через інтерфейс «Налаштування доступу».

Як зазначено в документації 1С-Бітрікс, кожен модуль визначає власні константи прав. У D7-компонентах і REST API працює окремий механізм — Bitrix\Main\Access, заснований на правилах (AccessRule), провайдерах (AccessProvider) і суб'єктах (AccessSubject). Якщо проєкт активно використовує D7, права потрібно проектувати з урахуванням цього шару.

Чому важливо проектувати рольову модель?

Без проектування права налаштовуються «на коліні»: дали групі повний доступ на модуль «тимчасово», а через місяць вона залишається. У результаті один користувач може ненароком змінити ціну або видалити товар. Ручне призначення займає 2-3 дні, але породжує 5-10 конфліктів. Проектування з матрицею займає 3-7 днів, але дає прозору систему без сюрпризів. Систематичне проектування рольової моделі доступу 1С-Бітрікс зменшує помилки у 4 рази.

Як проходить процес проектування?

Робота починається не з Бітрікса, а з аналізу бізнес-процесів замовника. Потрібно зрозуміти: хто створює контент, хто модерирує, хто публікує, хто тільки дивиться, хто адмініструє технічно. Це п'ять типів акторів.

На практиці розробка рольової моделі проходить через етапи:

  1. Аудит існуючих груп. На живих проєктах часто виявляються 15–20 груп, половина з яких — застарілі. Починаємо з інвентаризації: b_group, b_user_group.
  2. Матриця доступу. Складаємо таблицю «роль × ресурс».
  3. Мапінг на групи Бітрікса. Визначаємо, чи потрібне відображення 1:1 чи одна бізнес-роль покривається кількома технічними групами.
  4. Налаштування прав на інфоблоки. Для великих каталогів права задаються окремо на читання, запис, повний доступ і успадковуються через CIBlockSection.
  5. Тестування прав. Створюємо тестових користувачів і перевіряємо граничні сценарії.
Роль Каталог (catalog) Замовлення (sale) Інфоблоки (iblock) Адміністрування
Контент-менеджер catalog_read немає iblock_edit (товари) немає
Менеджер продажів catalog_read sale_edit немає немає
Технічний адміністратор catalog_admin sale_admin iblock_admin full

Кейс із нашої практики: розмежування доступу в B2B-магазині

Наш клієнт — оптовий інтернет-магазин з ролями: оператор складу, менеджер продажів, регіональний керівник, контент-менеджер, технічний адміністратор. Разом 5 ролей, 3 інфоблоки (товари, новини, банери), модулі catalog, sale, iblock.

Проблема при початковому налаштуванні: менеджери з продажу випадково отримали право редагувати ціни — через групу «Співробітники», якій дали catalog_admin тимчасово і забули прибрати. Виявили через три тижні, коли один менеджер змінив ціну на позицію з високим обігом.

Рішення: пересклали групи з нуля, застосувавши принцип мінімально необхідних прав (RBAC). Для каталогу розділили права: catalog_read — склад, iblock_edit тільки на інфоблок товарів — контент-менеджер, повний catalog_admin — тільки технічний адміністратор. Права на інфоблоки призначили явно через CIBlock::SetPermission(), прибравши успадкування від загальних налаштувань модуля.

Результат: 5 груп замість 17, задокументована матриця доступу, яку розуміє не тільки розробник, але й технічний директор замовника. Проектування скоротило час налаштування прав у 3 рази порівняно з ручним методом. Ми гарантуємо якість проектування та надаємо сертифіковану документацію. Наша компанія має 5 років досвіду в цій сфері.

Особливості Enterprise-проєктів

На проєктах з редакцією «Ентерпрайз» (множина сайтів під однією ліцензією) додається вимірювання сайтів: користувач може бути адміністратором одного сайту, але не мати доступу до іншого. Це керується через b_user_site і вимагає окремого проектування — матриця стає тривимірною: роль × ресурс × сайт.

Для REST API та інтеграцій проектується окремий шар: webhook-користувачі та додатки отримують тільки скоупи, необхідні для конкретної інтеграції. Давати інтеграції права адміністратора — типова помилка, яка виявляється тільки при інциденті безпеки.

Що входить у роботу та строки

Етап Тривалість (типовий проєкт) Результат
Аналіз бізнес-процесів 1 день Список акторів та їх потреб
Складання матриці доступу 1 день Таблиця «роль × ресурс»
Узгодження 1 день Затверджена матриця
Реалізація в Бітрікс 2-3 дні Налаштовані групи та права
Тестування 1 день Тест-протокол
Документація 1 день Матриця, рекомендації

Проектування рольової моделі для стандартного набору ролей (5–8) і типових модулів займає 3–7 робочих днів. Складні Enterprise-проєкти з множиною сайтів та нестандартними модулями — 2–4 тижні. До результату роботи входять: задокументована матриця доступу, налаштовані групи користувачів, тест-протокол перевірки прав, рекомендації щодо підтримки моделі при зростанні команди.

Чек-лист для перевірки прав

  • Переконайтеся, що кожен користувач входить тільки в потрібні групи.
  • Перевірте, що права на модулі не дублюються.
  • Протестуйте доступ до ключових розділів від імені кожної ролі.
  • Переконайтеся, що інтеграції (REST, обмін з 1С) мають мінімально необхідні скоупи.
  • Задокументуйте матрицю доступу.

Отримайте консультацію з проектування рольової моделі. Зв'яжіться з нами — ми допоможемо налаштувати безпечне та прозоре розмежування прав. Замовте аналіз поточної системи доступу.

Типові помилки при проектуванні архітектури проектів на 1С-Бітрікс

Ми не раз стикалися з проектами, де неправильна архітектура 1С-Бітрікс призводила до падіння продуктивності. Каталог на 80К товарів віддавав сторінку за 5 секунд — і це при порожньому кеші. Архітектура проектів на 1С-Бітрікс — фундамент, який визначає продуктивність і вартість підтримки. Помилки накопичуються і через рік перетворюються на капітальний рефакторинг, вартість якого в рази вища за початкове проектування. За оцінками нашої практики, такий рефакторинг може коштувати значно, не рахуючи втрати виручки під час простою. Фундаментальні рішення щодо зберігання даних та кешування закладаються на старті — потім змінюються з величезними витратами.

Правильне проектування на старті економить до 40% бюджету на розробку. Ми проектуємо структуру даних, кешування, масштабування та інтеграції — з урахуванням зростання навантаження до 500К товарів та пікового трафіку в Чорну п’ятницю. Кожен проект проходить етап навантажувального тестування, щоб уникнути сюрпризів у продакшені. Оптимальна архітектура знижує вимоги до хостингу, заощаджуючи значну суму щомісяця.

Вибір типу зберігання: інфоблоки або Highload-блоки?

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

Звичайні інфоблоки працюють через таблиці b_iblock_element і b_iblock_element_property. Властивості зберігаються в EAV-моделі — кожне значення в окремому рядку b_iblock_element_property. При 50 властивостях і 100К елементів отримуємо 5 мільйонів рядків в одній таблиці. MySQL починає задихатися на JOIN-ах при фільтрації.

Інфоблоки гарні для:

  • Контенту до 10-50К елементів — статті, новини, акції
  • Сутностей, де потрібен візуальний редактор та SEO-модуль
  • Елементів з успадкуванням властивостей від розділів

Highload-блоки — плоскі таблиці. Одна сутність — одна таблиця з колонками. Жодного EAV. Фільтрація за індексованими колонками працює на порядок швидше. Каталог на 200К товарів з фасетним індексом (b_catalog_sm_*) віддає фільтр за 50ms замість 3 секунд. Highload-блоки з індексованими колонками фільтрують дані в 10 разів швидше, ніж EAV-модель інфоблоків.

Highload-блоки обов'язкові для:

  • Каталоги > 50К товарів
  • Довідники, які викликаються при кожному завантаженні (міста, бренди, характеристики)
  • Дані з частою записом — логи, заявки, історія
  • Сутності, де потрібні прямі SQL-запити та агрегації
Чому Highload-блоки кращі для каталогів?Основна причина — відсутність EAV. В інфоблоках для фільтрації за 10 властивостями MySQL виконує до 10 JOIN до таблиці `b_iblock_element_property`. Highload-блоки зберігають всі значення в одному рядку, і фільтр — це звичайний WHERE з індексом. При 100К товарах різниця в часі виконання запиту — від 2 секунд до 20 мілісекунд.

D7 ORM та свої таблиці — для бізнес-логіки, яка не вписується в модель інфоблоків. Зв'язки many-to-many, обчислювані поля, кастомні агрегації. Bitrix\Main\ORM\Data\DataManager дає типобезпеку, валідацію та систему подій. Але доведеться писати адмінку з нуля.

Критерій Інфоблоки Highload D7 ORM
Об'єм даних До 50K 50K-10M+ Будь-який
Швидкість фільтрації Деградує з ростом Стабільна Максимальна
Гнучкість структури Висока (EAV) Середня (фіксована) Повна
Адмінка з коробки Так Так Ні
Підтримка SEO-модуля Так Обмежена Ні

Як масштабувати 1С-Бітрікс без втрати продуктивності?

Горизонтальне масштабування — тема, на якій горять 90% проектів. Однак думають про нього, коли сайт вже лежить.

Перший крок — сесії з файлів у Redis. Без цього другий веб-сервер марний: користувач авторизувався на сервері A, наступний запит йде на сервер B, сесію не знайдено — розлогін. У .settings.php:

'session' => ['value' => ['mode' => 'redis', 'host' => '127.0.0.1', 'port' => 6379]]

Далі:

  • nginx upstream або HAProxy розподіляє запити. Модуль «Веб-кластер» Бітрікс підтримує кластеризацію, але потрібна ліцензія «Бізнес» або вище
  • CDN для статики — /upload/, JS, CSS. Сервер перестає витрачати ресурси на віддачу зображень
  • Реплікація MySQL — master для запису, slave для читання. Бітрікс підтримує до 9 slave-з'єднань через налаштування в .settings.php. Але є лаг реплікації — товар додали, а на slave він з'явиться через 0.5-2 секунди

Вертикальне масштабування — дешевше і швидше на старті:

  • EXPLAIN на кожен важкий запит. Один складовий індекс на b_iblock_element_property (IBLOCK_PROPERTY_ID, VALUE) прискорює фільтрацію в 10 разів
  • Багаторівневий кеш: керований кеш Бітрікс → memcached → композитний сайт. Перевіряємо hit rate в панелі «Продуктивність» — якщо нижче 90%, щось не так
  • OPcache з JIT на PHP 8.1+ — безкоштовне прискорення на 15-30%

Коли варто виносити процеси з моноліту?

Бітрікс — моноліт, і це нормально. Ламати його на мікросервіси — безумство. А от винести важкі процеси — правильний хід.

Імпорт/експорт — найчастіший біль. Обмін з 1С через CIBlockCMLImport блокує таблиці інфоблоків на час імпорту. 100К товарів — це 20-40 хвилин, коли фільтрація на сайті гальмує. Рішення: винести імпорт в окремий воркер через RabbitMQ, писати в проміжну таблицю, потім атомарно перемикати.

  • Пошук — Elasticsearch замість штатного search.title. Повнотекстовий та фасетний пошук, автодоповнення, виправлення помилок. Навантаження з MySQL знімається повністю
  • Сповіщення — push, SMS, email через чергу. CEvent::Send() синхронний — поки лист не піде, користувач чекає відповідь сервера. Черга вирішує це
  • Генерація звітів — PDF, Excel на великих обсягах. В окремий процес, результат — посилання на завантаження

API: REST, GraphQL, вебхуки

REST API Бітрікса (/rest/) покриває CRM, завдання, диск, але не покриває каталог та інфоблоки в потрібному обсязі. Для SPA на React/Vue доводиться писати свої ендпоінти через Bitrix\Main\Engine\Controller.

  • GraphQL — для мобільних додатків, де трафік дорогий. Клієнт запитує тільки потрібні поля
  • Вебхуки — подієва модель: нове замовлення → POST на зовнішній URL. Не потрібно опитувати API кожні 5 хвилин
  • Версіонування — /api/v1/, /api/v2/. Без цього оновлення API ламає всіх споживачів одночасно
  • OpenAPI/Swagger — автогенерація документації. API без документації через місяць не пам'ятає навіть автор

Як уникнути дорогого рефакторингу?

Найдієвіший спосіб — приймати архітектурні рішення усвідомлено, з урахуванням реальних сценаріїв навантаження та зростання даних. Ми використовуємо підхід ADR (Architecture Decision Records) для фіксації кожного рішення — контекст, альтернативи, наслідки. Це дозволяє новим розробникам входити в проект за дні, а не тижні, та виключає двояке тлумачення логіки через півроку.

Документація: ADR замість Word-файлів

  • ADR — Architecture Decision Records. Короткий файл: контекст, рішення, наслідки. Як показує практика, фіксація архітектурного рішення в момент його прийняття рятує від нескінченних здогадок через півроку. Наприклад, через рік новий розробник відкриє ADR і за п'ять хвилин зрозуміє, чому для каталогу обрали Highload, замість гадати три дні
  • Діаграми — сервери, потоки даних, точки інтеграцій. PlantUML або Mermaid, зберігаються в репозиторії поруч з кодом
  • ER-діаграми — інфоблоки, властивості, зв'язки. Без схеми навіть автор через півроку не згадає, чому властивість LINKED_PRODUCTS посилається на інший інфоблок через прив'язку, а не через Highload-довідник
  • Runbook — деплой, відкат, масштабування, дії при аварії. Бо аварія станеться в суботу вночі, коли архітектор не на зв'язку

Техборг: старе ядро, прямі SQL, логіка в шаблонах

Техборг в Бітріксі специфічний. Три головних джерела:

  1. Старе ядро замість D7 — CIBlockElement::GetList() замість \Bitrix\Iblock\Elements\ElementTable::getList(). Старе ядро не підтримує ORM-фічі, повільніше, і Бітрікс рано чи пізно його задепрекейтить
  2. Прямі SQL в шаблонах компонентів — $DB->Query("SELECT...") прямо в template.php. Переносимо в сервісні класи, замінюємо на ORM
  3. Бізнес-логіка в result_modifier.php — файл, який повинен готувати дані для шаблону, а не рахувати знижки та перевіряти права доступу

Підхід: PHPStan level 5+ для виявлення проблем, матриця «вплив на бізнес / вартість фікса», поетапний рефакторинг по спринтах. Не все одразу — але тренд повинен бути низхідним.

Як ми проектуємо архітектуру

  1. Аналіз бізнес-вимог та навантажувальних характеристик (піковий RPS, розмір каталогу, типові сценарії)
  2. Проектування структури даних — вибір інфоблоки/Highload/D7 ORM, зв'язки, індекси
  3. Визначення схеми кешування та черг (Redis, RabbitMQ, композит)
  4. Прототипування та навантажувальне тестування на реальних даних (200К записів, 30+ властивостей)
  5. Документування — ADR, ER-діаграми, runbook, специфікації API
  6. Рев'ю проекту — внутрішнє та з замовником

Для одного інтернет-магазину ми спроектували архітектуру на Highload-блоках та Elasticsearch. Фільтрація товарів до 50 мс, час першого байта 0.3 с. Економія на хостингу — суттєва.

Що входить в роботу

Ми — команда сертифікованих спеціалістів з досвідом впровадження 1С-Бітрікс понад 8 років. Виконали архітектуру для 50+ проектів з каталогами до 300К товарів та навантаженням до 10К одночасно активних користувачів. Гарантуємо, що спроектована архітектура витримає пікові навантаження і не потребуватиме рефакторингу в найближчі 3 роки.

Етап Термін Результат
Збір вимог 3-5 днів Документ з навантажувальними характеристиками, профілем користувачів, планом зростання
Проектування 1-2 тижні Структура даних, схема інтеграцій, ADR по ключових рішеннях
Прототипування 1 тиждень Навантажувальні тести на реальних обсягах (Highload-блок з 200К записів і 30 властивостей — перевіряємо фільтрацію до 50 мс)
Документування 3-5 днів Діаграми, runbook, специфікації API
Рев'ю 2-3 дні Внутрішнє рев'ю, потім з замовником

На виході: архітектурний документ (ADR, ER-діаграми, runbook), прототип критичних вузлів (опціонально), документація по API, рекомендації щодо кешування та масштабування.

Якщо ваша архітектура викликає сумніви або ви готуєтеся до зростання трафіку — зв'яжіться з нами для консультації. Ми проведемо аудит поточної структури і запропонуємо оптимальну стратегію. Замовте комерційну пропозицію — ми підготуємо її протягом 2 робочих днів. Щоб отримати персональну консультацію щодо вашого проекту, напишіть нам — розкажемо, які архітектурні рішення підійдуть саме вам.