Обмеження доступу на рівні записів RLS. RLS – гнучке та тонке налаштування обмежень доступу до даних Обмеження на рівні записів 1с
У системі 1С Підприємство 8 сьогодні ми продовжимо вивчення механізму прав і заглибимося далі — в механізм RLS (обмеження прав на рівні записів).
Нижче ми розглянемо переваги та недоліки даного методу та розглянемо налаштування RLS у 1С Підприємстві 8.3 на прикладі.
1С RLS (Record Level Security) або обмеження прав на рівні запису— це права користувачів в системі 1С, яка дозволяє розділити права для користувачів у розрізі даних, що динамічно змінюються.
Найпоширеніший вид налаштування 1C RLS – обмеження видимості користувача в розрізі організацій або клієнтів (користувач бачить лише «свої» дані).
Основна перевага – наявність механізму взагалі, механізм досить складний та цікавий. Дозволяє дуже тонко розмежувати права користувачів - користувачі можуть навіть не здогадуватися про існування інших даних.
Недоліки 1С 8 RLS
Серед недоліків можна назвати помітне падіння продуктивності системи. Це викликано тим, що платформа під час побудови запиту у базі даних ускладнює будь-який запит розробника додатковими умовами.
Також серед недоліків — складність налаштування цього функціоналу та складність налагодження. 1C випустило дуже мало матеріалів з налаштування та роботи цього функціоналу. Досить важко знайти спеціаліста, який би грамотно налаштував механізм.
Настроювання обмеження прав на рівні записів 1С RLS
Обмеження прав на рівні запису (RLS) застосовується для обмеження таких типів прав:
- Читання
- Додавання
- Зміна
- Вилучення
Отримайте 267 відеоуроків з 1С безкоштовно:
Зовнішнє налаштування RLS (прав на рівні записів) схоже на складання простого . Приклад шаблону для обмеження доступу видимості документів клієнта з шапки документа:
##Якщо &ВикористовуватиОбмеженняПравДоступуНаРівніЗаписів##Тоді
ПоточнаТаблиця З #ПоточнаТаблиця ЯК ПоточнаТаблиця
ЛІВОЕ З'ЄДНАННЯ (ВИБРАТИ РІЗНІ
СкладГрупи.Посилання ЯК ГрупаКористувачів
З
Довідник.ГрупиКористувачів.КористувачіГрупи ЯК СкладГрупи
ДЕ
СкладГрупи.Користувач = &ПоточнийКористувач) ЯК ГрупиКористувачів
ПЗ (&ВикористовуватиОбмеженняПравДоступуНаРівніЗаписів)
ДЕ (&ВикористовуватиОбмеженняПравДоступуНаРівніЗаписів = БРЕХНЯ
АБО (НЕ 1 В
(ВИБРАТИ ПЕРШІ 1
1 ЯК ПолеВідбору
З
РеєстрВідомостей.ПризначенняВидівОб'єктівДоступу ЯК ПризначенняВидівОб'єктівДоступу
ДЕ
ПризначенняВідівОб'єктівДоступу.ГрупаКористувачів = ГрупиКористувачів.ГрупаКористувачів
І ВИБІР
КОЛИ ПризначенняВидівОб'єктівДоступу.ВиглядОб'єктаДоступу = ЗНАЧЕННЯ(Перерахування.ВидиОб'єктівДоступу.Контрагенти)
І ПоточнаТаблиця.#Параметр(1) ПОСИЛАННЯ Довідник.Контрагенти
І НЕ ПоточнаТаблиця.#Параметр(1) = ЗНАЧЕННЯ(Довідник.Контрагенти.ПустаПосилання)
ТОДІ ВИБІР
КОЛИ 1 В
(ВИБРАТИ ПЕРШІ 1
1
З
Довідник.Контрагенти ЯК Контрагенти ВНУТРІШНЯ З'ЄДНАННЯ РеєстрВідомостей.НалаштуванняПравДоступуКористувачів ЯК НалаштуванняПравДоступуКористувачів
ПЗ
НалаштуванняПравДоступуКористувачів.Об'єктДоступу = Контрагенти.ГрупаДоступуККонтрагенту
І НалаштуванняПравДоступуКористувачів.Вигляд Об'єктаДоступу = ЗНАЧЕННЯ(Перерахування.ВидиОб'єктівДоступу.Контрагенти)
І (НалаштуванняПравДоступуКористувачів.Користувач = ПризначенняВидівОб'єктівДоступу.ГрупаКористувачів
АБО НалаштуванняПравДоступуКористувачів.Користувач = ЗНАЧЕННЯ(Довідник.ГрупиКористувачів.ВсіКористувачі))
І НалаштуванняПравДоступуКористувачів.Запис = ІСТИНА
ДЕ
Контрагенти.Посилання = ПоточнаТаблиця.#Параметр(1))
ТОДІ ІСТИНА
Інакше брехня
КІНЕЦЬ
Інакше ІСТИНА
КІНЕЦЬ = БРЕХНЯ))
І НЕ Групи Користувачів. Група Користувачів Є NULL)
##КінецьЯкщо
По суті, цей запит щоразу додається при запиті до таблиці «Таблиця ##». З чого можна уявити, яке додаткове навантаження несе у собі механізм обмеження лише на рівні записи.
Як Ви бачите, у запиті є спеціальні параметри, наприклад » &Використовувати ОбмеженняПравДоступуНаРівнеЗаписів». Ці параметри в РЛС підбираються з метаданих об'єктів — ««. Як правило, вони задаються під час старту сесії користувача.
Конструктор обмеження доступу до даних
Для зручності розробника в 1С 8.3 є спеціальна утиліта для допомоги в налаштуваннях РЛС — Конструктор обмеження доступу до даних. Він викликається з поля "Обмеження доступу". Виглядає наступним чином:
Класичне завдання: відкрити користувачеві доступ до будь-якого об'єкта, але не до всіх елементів/документів, а лише до деяких.
Наприклад, щоб менеджер бачив звіти лише за своїми клієнтами.
Або це може бути обмеження "все, крім деяких".
Або обмеження не на довідники/документи, а на дані регістрів…
Наприклад, щоб користувачі жодним звітом не могли витягнути дані щодо виплат партнерам.
По суті - це тонка і дуже гнучка настройка "що можна бачити цьому користувачеві, а про що йому і не потрібно здогадуватися".
Чому саме RLS?
На більшості впроваджень потрібно для різних користувачів встановити рівні доступу до інформації в базі.
У змінах за можливі права доступу до даних відповідають спеціальні об'єкти метаданих – ролі. Кожному юзеру інформаційної бази призначається одна або кілька ролей. Вони визначають, чи можливі операції з конкретними об'єктами метаданих (читання, запис, проведення тощо).
Але це не все.
Часто буває необхідно не просто відкрити/заборонити доступ до певного об'єкта, а обмежити доступ до частини даних у ньому.
Тільки за допомогою ролей вирішити таке завдання не можна– для цього реалізовано механізм обмеження доступу на рівні записів (RLS).
Обмеження є умовами, у виконанні яких дію над даними (читання, запис тощо.) буде дозволено. так можна обмежити доступ не до об'єкта в цілому, а лише до частини його даних.
Про RLS – докладніше: 8 відео та PDF
Оскільки це поширене завдання адміністрування 1С – пропонуємо подивитись більш детальні матеріали:
Обмеження доступу до даних за допомогою ролей
У цьому відео розповідається, як обмежується доступ до даних за допомогою ролей. Уточнюється, що ролі обмежують доступом до виду об'єктів інформаційної бази (окремий довідник, але з конкретні елементи довідника).
Обмеження доступу на рівні записів (RLS)
У цьому відео розповідається про механізм обмежень доступу на рівні записів (RLS), коли можна налаштувати доступ не до всього довідника в цілому, а до окремих його елементів, залежно від даних, що зберігаються в інформаційній базі. Подібні обмеження прописуються у ролях.
Реалізація обмеження доступу на рівні записів довідника Контрагенти
У цьому відео розповідається, як у демонстраційній конфігурації «Керована програма» налаштувати доступ менеджерів лише до власних контрагентів, закріплених за ними.
Принцип роботи обмежень доступу лише на рівні записів на низькому рівні
У цьому відео розповідається, як платформа трансформує запити, які передаються для виконання на сервер СУБД, за наявності обмежень доступу на рівні записів.
Спільне застосування кількох обмежень доступу на рівні записів
Користувачеві інформаційної бази може бути призначено кілька ролей. При цьому в кожній ролі можуть бути обмеження доступу на рівні записів. У цьому відео розповідається, як поводиться система при накладенні обмежень.
Накладення обмежень методом ВСІ
У цьому відео описується перший спосіб накладання обмежень на рівні записів – метод ВСІ. При цьому, якщо у вибірку потрапляють записи, до яких доступ обмежено, буде виведено повідомлення про помилку.
Накладення обмежень методом ДОЗВОЛЕНІ
У цьому відео описується перший спосіб накладення обмежень на рівні записів – метод ДОЗВОЛЕНІ. При цьому у вибірку потраплять тільки записи, до яких у користувача є права доступу.
Ось кілька тем із курсу:
- Встановлення та оновлення платформи «1С:Підприємство 8» – ручна та автоматична, під Windows та Linux
- Автоматичний запускдля виконання регламентних операцій
- Оновлення конфігурацій з режиму користувача
- Оновлення нетипових конфігурацій. Як уникнути проблем при оновленнізмінених типових конфігурацій
- Створення власних cfu-файлів постачання
- Інструменти БСП: зовнішні форми, обробка заповнення документів і т.п.
- Використання безкоштовної СУБД PostgreSQL
- Встановлення та запуск кластера серверів 1С:Підприємство 8
- Утиліта адмініструваннядля налаштування кластера та робочих серверів
- Налаштування RLSна прикладі УПП 1.3 та ERP 2
- Що робити, якщо дані в ІБ пошкоджені
- Налаштування обмінів данимиміж конфігураціями
- Організація групової розробки
- Налаштування та використання апаратних ключів захисту
- Програмні ліцензії 1С: встановлення та прив'язка до зовнішнього обладнання
Вам у будь-якому разі колись доведеться розгортати 1С, налаштовувати резервування, права доступу, різні режими запуску, тестувати цілісність баз, забезпечувати роботу серверів тощо.
І краще це одразу робити правильно.
Щоб потім не було “…! Ну що за…! Твою ж …!” – та інших виразів жалю:)
Механізм RLS у 1С (обмеження доступу на рівні записів) дозволяє розробнику встановлювати свої відбори та умови безпосередньо на таблиці БД. Такі обмеження можуть накладатися на читання, додавання, зміну та видалення.
Основним недоліком методу є зниження працездатності системи загалом. Справа в тому, що до основних запитів, що динамічно отримують дані, додаються додаткові відбори. Щоразу, коли користувач буде звертатися до будь-яких даних інформаційної бази, на яку встановлено обмеження, програма здійснюватиме перевірку за допомогою виконання запиту.
Незважаючи на такий вагомий недолік, механізм RLS досить зручний і гнучкий. З його допомогою можна налаштувати систему так, щоб жоден користувач не побачив нічого зайвого. Обмежувати доступ своїх співробітників, особливо, якщо їх багато, дуже продуктивно. Справа полягає навіть не так у недовірі, як у захисті від випадкових помилок та людського чинника. Чим менше даних доступно, тим легше з ними працювати і не заплутатися.
В одній із статей ми вже частково стосувалися теми обмеження доступу на рівні записів. У цьому випадку буде розглянуто більш поглиблене налаштування з боку розробника.
Настроювання обмеження доступу на рівні записів
Налаштування та розробка РЛС проводиться в конфігураторі 1С. Для цього насамперед створіть роль у гілки метаданих.
На вкладці Шаблони обмежень можна створити як один, так і кілька таких шаблонів. Зовні вони практично нічим не відрізняються від звичних запитів.
Далі перейдіть на вкладку "Права" тієї ролі, для якої хочете встановити обмеження. Для зручності ви можете скористатися конструктором запиту, який має лише дві вкладки «Таблиці та поля» та «Умови».
Як ви можете побачити на зображенні нижче, ми додали лише одне обмеження з текстом:
ДЕ ГрупаТоварів = &ГрупаТоварів
У результаті, коли користувач звертатиметься до довідника «Номенклатура», програма додаватиме до всіх запитів рядок із цією умовою.
RLS- це можливість розробника задати умову на таблиці бази даних тих чи інших користувачів (груп користувачів) і дати їм побачити зайвого. Умова має булевий тип. Якщо значення умови набуває значення «істина», то доступ надається, інакше - забороняється.
RLS використовується одночасно з налаштуванням звичайних прав доступу. Тому перш ніж розпочати налаштування RLS, необхідно роздати звичайні права на об'єкти конфігурації.
RLS застосовується для таких видів прав доступу:
- Читання
- Додавання
- Зміна
- Вилучення
Порядок налаштування RLS
Розглянемо простий приклад виконання налаштування. Знімки екрана зроблено на версії 1С Підприємство 8.2 (8.2.9.356). Синтаксис шаблонів текстів обмежень описаний у документації 8.2 у книзі «Посібник розробника. Частина 1», тож на ньому зупинятись не будемо.
Отже, насамперед потрібно визначити шаблони обмежень кожної існуючої ролі.
Після цього на підставі вказаних шаблонів задаються обмеження до необхідних об'єктів. Для редагування тексту умови можна скористатися конструктором обмежень доступу до даних.
Для редагування кількох ролей зручно керувати через вікно "Всі ролі".
Для копіювання умов в інші ролі можна використовувати вікно "Всі обмеження доступу". Шаблони в інші ролі можуть копіюватися лише вручну.
От і все. Ви можете перевірити результат.
Недоліки використання RLS:
- Застосування механізму обмеження доступу на рівні записів призводить до неявного збільшення таблиць, що беруть участь у запиті, що може призвести до помилок клієнт-серверного режиму роботи бази даних.
- Для контролю запису буває важко чи неможливо реалізувати складну логіку програми. У таких випадках краще використовувати умови у процедурі ПріЗапису().
- Написання умови (запиту) потребує певної кваліфікації розробника.
- Додаткові труднощі можуть створити неможливість налагодження умови (запиту).
У типових конфігураціях права лише на рівні записів може бути задані інтерактивно наступних об'єктів: організації, контрагенти, номенклатура, склади, підрозділи, фізичні особи, заявки кандидатів та інші.
Слід пам'ятати, що обмеження прав доступу на рівні записів досить ресурсомісткий механізм і чим складніші обмеження Ви поставите, тим повільніше програма працюватиме, особливо при великій базі даних.
Восьма версія платформи «1С:Підприємство» (сьогодні 8.3) несла у собі безліч змін стосовно «сімки», серед яких особливо виділявся механізм обмеження прав доступу на рівні записів. Незважаючи на те, що можна, теоретично, обійтися і без нього, використовуючи виключно ролі, RLS дозволяє досягти більш тонкого налаштування доступу. Але для правильної експлуатації цього механізму потрібно чітко розуміти його суть і мати достатній досвід у розробці в 1С.
Що таке RLS?
Суть цього функціоналу полягає у можливості розробника запобігти доступу певного користувача або групи користувачів до таблиць або полів таблиць бази даних. Зазвичай обмеження використовуються, щоб не дати можливість користувачам 1С побачити та відредагувати конфіденційну, секретну інформацію, наприклад, обмежити співробітників компанії, що входить до групи, переглядом документів лише по своїй організації. Також механізм обмежень прав доступу на рівні запису можна використовувати, щоб усунути зайву інформацію з інтерфейсу.
Щоб отримати можливість писати запити для обмежень RLS, необхідно створити роль або взяти вже наявну. Налаштування RLS в 1С 8.3 може застосовуватись для наступних дій користувача:
- Додавання;
- Читання;
- Вилучення;
- Зміна.
Крім широких можливостей налаштування доступу, RLS несуть у собі й недоліки:
- Вимоги до кваліфікації розробника, тому що писати запит доведеться вбудованою мовою з урахуванням правил синтаксису;
- Відсутність можливості швидкого налагодження умови;
- Обмежені можливості щодо опису логіки: занадто складні умови доведеться все-таки писати в модулях документів та довідників;
- У клієнт-серверному варіанті баз можливе неявне зростання таблиць, включених у запит. До того ж відстежити цей процес дуже складно;
- Вимоги до ресурсів. Обмеження RLS споживають чимало потужності клієнтської машини і сервера;
- Нечисленна документація у вільному доступі.
Ще однією проблемою, яка може виникнути після налаштування 1С RLS, можуть стати звіти. Справа в тому, що розробники передбачають можливі обмеження RLS та будують звіти таким чином, щоб вони показували лише дозволені дані. Якщо у користувачів налаштовані різні обмеження RLS, то дані у звіті за однаковими параметрами у них можуть бути різні. Це може викликати питання, тому при проектуванні звітів або написанні запитів у RLS потрібно врахувати подібні ситуації.
Створюємо обмеження RLS
Для того щоб додати обмеження RLS, необхідно знайти потрібну роль і відкрити її подвійним клацанням.
Вікно, що відкрилося, містить 2 вкладки: «Права» і «Шаблони обмежень». Щоб накласти певні обмеження на конкретну дію, необхідно виділити її та у правій нижній частині натиснути на зелений плюс. З'явиться рядок, в якому ми зможемо задати обмеження 1С RLS вбудованою в 1С мовою.
Якщо ви знаєте синтаксис 1С (як свої п'ять пальців), можете писати прямо в полі «Обмеження доступу». Розробники 1С передбачили можливість відкривати конструктор запиту, який допоможе та підкаже, на що можна зробити обмеження. Щоб його відкрити, потрібно натиснути кнопку з трьома точками (Вибрати) або F4 і з'явитися вікно з кнопкою «Конструктор запиту…».
У вікні, що з'явиться, ви зможете налаштувати обмеження не тільки по даному довіднику, але і по інших об'єктах системи. Для цього необхідно додати їх на вкладці Таблиці та поля. Прописуємо обмеження на поля довідника "Номенклатура" та натискаємо на "ОК". Уважно ставтеся до назви змінних: параметри RLS задаються під час старту сесії користувача і повинні утримуватися в об'єкті метаданих.
На вкладці «Шаблони обмежень» задаються запити, які необхідні для копіювання однакових налаштувань RLS в 1С 8.3. Після того, як ви додали свій шаблон, на його ім'я можете звертатися в налаштуваннях прав доступу.
Також можна одночасно додавати обмеження на кілька ролей. Для цього в дереві конфігурації необхідно натиснути правою кнопкою миші розділ «Ролі» і вибрати пункт «Всі ролі».
Як висновок хотілося б відзначити, що ця стаття спрямована на консультантів-розробників 1С і може допомогти в першу чергу тим, хто вже мав досвід розробки на «1С:Підприємство». Незважаючи на простоту, знання семантики та розуміння структури бізнес-процесів власного підприємства або організації замовника для правильної роздачі прав – вимагають певного рівня знань та досвіду.