Права доступу
Хто що може в системі, вирішують три речі в картці користувача: роль, доступ за замовчуванням і перелік компаній. Усе це налаштовується у двох реєстрах модуля Система — «Користувачі» та «Ролі». Ця стаття про те, як три налаштування працюють разом.
Як система вирішує «можна чи ні»
Щоразу, коли користувач відкриває реєстр, звіт чи пункт обслуговування, система ставить два питання по черзі:
- Що каже роль? Серед рядків ролі шукається рядок про цей конкретний об'єкт; якщо такого немає — рядок «про всі об'єкти цього типу» (з порожньою колонкою «для»).
- Роль мовчить? Тоді відповідає перемикач «Доступ за замовчуванням» із картки користувача: «Повна» — можна все, «Лише для читання» — дивитися можна, міняти ні, «Заборонений» — нічого не можна.
Роль — точковий інструмент, доступ за замовчуванням — фон для всього, що в ролі не згадано. Тому користувач без ролі з повним доступом може все, користувач без ролі з «Заборонений» — нічого, а звичайних співробітників налаштовують роллю поверх суворого фону.
Єдиний виняток — задачі: окремі дії на кшталт «зняти ОК з документа». Фон на них не діє: про що роль мовчить, вирішує сама задача. Більшість без рядка в ролі закриті («Знімати ОК із документів», «Показувати собівартість»), кілька відкриті («Можливість відкривати менеджер процесів», «Можливість відкривати менеджер ресурсів», «Показувати звіт по всіх бонусах», «Можливість змінювати продавця в POS») — закрити таку задачу можна лише рядком із denyAll: її власним або рядком «про всі задачі».
Картка користувача

На кадрі — касир. Вкладка «Налаштування доступу» тримає обидва важелі: поле «Роль» (тут КАСА) і перемикач «Доступ за замовчуванням». Поруч пароль із підтвердженням і відділ — він обов'язковий для роботи з касою.
Над вкладками три позначки, і плутати їх не варто:
- «Заборонити вхід» — людина не може ввійти, але лишається «живою» в довідниках: її й далі можна вказувати відповідальною в документах. Підходить для тимчасового блокування.
- «Закрито» — архів: співробітник звільнився. Вхід закритий, вся історія його документів збережена.
- «Касир» — позначка для роботи POS, до прав не стосується.
Обидві блокувальні позначки діють миттєво: якщо людина була в системі, усі її сеанси — у вікнах і в касі — буде закрито.
З блокуванням пов'язана і ліцензія: ліміт користувачів рахується лише за «живими» — не закритими і не забороненими. Ліміт перевіряється не при створенні користувача, а при створенні будь-якого іншого запису: коли «живих» більше, ніж дозволяє ліцензія, система відповідає «Ліміт користувачів вичерпано! Дозволено — …, використано — ….» і радить закрити користувачів у модулі «Система», реєстр «Користувачі». Нікого видаляти не треба — закрийте зайвих, і місце звільниться.
Роль

Роль — це перелік рядків із трьох колонок:
- «тип» — про що рядок:
module(модуль),register(реєстр),setting(налаштування),report(звіт),maintenance(служба обслуговування),action(задача); - «для» — конкретний об'єкт; порожня колонка означає «всі об'єкти цього типу»;
- «доступ» — один із готових кодів доступу.
Коди доступу однакові в усій системі:
| Код | Що дозволяє |
|---|---|
allowAll |
усе: бачити, створювати, міняти, видаляти |
readAndList |
бачити список і відкривати записи, нічого не міняючи (службу не відкриває) |
showOnly |
лише бачити пункт (службу не відкриває) |
runOnly |
лише запускати (задачі й служби) |
denyAll |
нічого |
Точний рядок сильніший за рядок «про всі»: якщо реєстрам загалом дано readAndList, а реєстру «Вкладення» — allowAll, вкладення можна буде і додавати. А про що роль мовчить зовсім — вирішує фон із картки користувача.
Рядок module вирішує лише меню. Закритий модуль зникає з меню, але його реєстрів, звітів і служб не закриває: про що роль мовчить, те відкриває фон із картки — за посиланням із вікна іншого модуля, через API і MCP. Щоб закрити самі дані, потрібні рядки register, report і maintenance: найпростіше — рядки «про всі» з denyAll і точкові дозволи поверх них, як у ролі приймальника в статті «Ролі».
На кадрі — роль «тільки перегляд», якою знято кадри цієї документації: модулі, реєстри й налаштування скрізь readAndList, звіти allowAll (запуск звіту нічого не змінює в даних), служби і задачі denyAll. Людина з такою роллю бачить усе і не може торкнутися нічого.
Про служби обслуговування одна тонкість: служба або доступна, або ні. Її видно в меню й можна запустити, лише коли код дає запуск — allowAll чи runOnly. readAndList, showOnly і фон «Лише для читання» служби не відкривають: служби міняють дані, а «бачити, але не запускати» для служби немає.
Вкладка «Доступ до полів» — точкове налаштування всередині реєстру: окреме поле можна зробити для ролі незмінним — «Тільки перегляд (для поля)», «Тільки редагування (для поля)» чи «Тільки створення (для поля)»; ці обмеження судить вікно (виняток — прапорець проведення чи затвердження: його судить і сервер). «Не бачити (для поля)» ховає значення і на сервері, але роль, у якої є хоч одне таке поле, не отримує жодного звіту й друку. Тому собівартість і закупівельні ціни від менеджерів з продажу ховає не вкладка, а право «Показувати собівартість» — подробиці в статті «Ролі».
Компанії

Коли фірм у базі кілька, вкладка «Компанії» в картці користувача вирішує три речі:
- у які компанії людина взагалі вхожа — коли список заповнено, фірми поза ним для неї закриті: ні входу, ні перемикання;
- «За замовчуванням» — у якій компанії людина опиняється одразу після входу;
- окремі «Роль» і «Рівень доступу» для кожної фірми. Головбух може бути повноправним в одній компанії і лише переглядачем у сусідній. Порожні колонки означають «діють роль і доступ із першої вкладки».
Перемикаючись між компаніями, система на льоту підставляє роль і рівень тієї фірми, в яку користувач перейшов. Якщо роль чи рівень фірми прочитати не вдалося (збій бази), вхід відмовляє «Вхід заборонено: не вдалося визначити вашу роль у компанії», а перемикання — помилкою: права з першої вкладки замість фірмових система не підставляє.
Порожня вкладка — теж налаштування. Користувач без жодного рядка тут потрапляє в першу активну компанію за кодом (не за назвою), і перемкнутись йому нікуди: у списку компаній лише вона. Тому нова фірма, чий код за абеткою стоїть раніше за наявні, забирає до себе всіх користувачів із порожньою вкладкою — з їхнього наступного входу.
На кадрі — службовий користувач, який знімає кадри для цієї документації: він вхожий у всі три демонстраційні фірми з роллю «тільки перегляд» у кожній.
Типові налаштування
Фірм у базі кілька. Кожному новому користувачеві заповніть вкладку «Компанії»: рядок на кожну фірму, де він працює, і «За замовчуванням» на основній. Без цього він опиниться в першій фірмі за кодом — і вирішить, що його вчорашні документи зникли.
Новий співробітник, якому поки лише показують систему. Доступ за замовчуванням «Лише для читання», роль можна лишити порожньою. Реєстри й налаштування він відкриває лише для перегляду і запускає звіти, а служби обслуговування й задачі йому закриті.
Касир. Роль каси, позначка «Касир», заповнений відділ. Каса працює, зайвого не видно.
Аудитор чи спостерігач. Роль як на кадрі вище: скрізь readAndList, звіти allowAll, служби й задачі denyAll.
Менеджер, якому не треба бачити закупівельні ціни. Звичайна робоча роль без права «Показувати собівартість». Без рядка цієї дії право закрите і так, але рядок action з порожнім «для» і allowAll чи runOnly його відкриває; надійніше — окремий рядок action «Показувати собівартість» із denyAll.
Співробітник звільнився. Позначка «Закрито» в картці. Історія документів лишається, вхід неможливий, місце ліцензії звільняється. Видаляти користувача не треба.
Тимчасово заблокувати вхід. «Заборонити вхід»: людина не ввійде, але в документах її й далі можна вказувати.
Як переконатися, що права налаштовані правильно
- Найнадійніший спосіб — увійти під цим користувачем і подивитися його очима: які модулі в меню, які реєстри відкриваються, що кажуть кнопки.
- Інша роль чи інший «Доступ за замовчуванням» у картці, новий пароль, а на вкладці «Компанії» — інша роль чи «Рівень доступу», додана чи прибрана компанія закривають усі сеанси людини одразу — наступний вхід уже з новими правами. Позначка «За замовчуванням» на вкладці «Компанії» сеансів не закриває: вона лише вирішує, у яку компанію приведе наступний вхід. Правка самої ролі діє без повторного входу: права ролі сервер перевіряє на кожну дію.
- Скарга «у мене зник пункт меню» — це майже завжди роль: перевірте, чи є рядок про цей модуль або реєстр і що стоїть у колонці «доступ» (як улаштоване меню — Робочий стіл: вікна, пошук і закладки).
- «Ліміт користувачів вичерпано» — не про права: ліцензія рахує живих користувачів. Закрийте тих, хто вже не працює.