Моделювання доступу до даних за допомогою RBAC

Керування доступом на основі ролей (RBAC) — це механізм, який дозволяє групувати права доступу за ролями та застосовувати їх до різних об’єктів, таких як таблиці баз даних або критерії пошуку (Search Conditions). Докладнішу інформацію про загальні принципи та застосування RBAC дивіться на сторінці Моделювання бізнес-процесів та розмежування прав доступу (RBAC).

1. Налаштування ролей та прав доступу

RBAC використовується для моделювання доступу до даних у системі за допомогою XML-конфігурацій. Основний елемент налаштування — це тег <ext:rbac>, в якому визначаються ролі та права доступу до об’єктів реєстру. Для кожної ролі можна вказати, до яких таблиць і стовпців вона має доступ, а також налаштувати доступ до критеріїв пошуку окремо.

1.1. Структура конфігурації

Налаштування прав доступу виконується через тег <ext:rbac>, який містить один або кілька тегів <ext:role>. Кожен тег <ext:role> відповідає за налаштування прав доступу для певної ролі в реєстрі.

Приклад. Структура конфігурації
<changeSet id="roles" author="registry owner">
    <comment>SET PERMISSIONS</comment>
    <ext:rbac>
        <ext:role name="role_name">
            <ext:table name="table_name" read="true" update="true" insert="true" delete="true"/>
        </ext:role>
    </ext:rbac>
</changeSet>
  • <ext:role> — елемент, що визначає роль, для якої встановлюються права доступу.

  • <ext:table> — елемент, який вказує на таблицю бази даних, для якої налаштовуються права. Доступ може бути встановлений на рівні таблиці або окремих колонок. У цьому прикладі права доступу встановлені на рівні таблиці, без необхідності вказувати кожну колонку окремо.

1.2. Приклад налаштування прав доступу

Наступний приклад показує, як налаштувати права доступу для кількох ролей, використовуючи доступ на рівні таблиць:

<changeSet id="roles" author="registry owner">
    <comment>SET PERMISSIONS</comment>
    <ext:rbac>
        <ext:role name="viewer">
            <ext:table name="employee_data" read="true"/>
        </ext:role>

        <ext:role name="editor">
            <ext:table name="employee_data" read="true" update="true"/>
        </ext:role>

        <ext:role name="admin">
            <ext:table name="employee_data" read="true" update="true" delete="true"/>
        </ext:role>
    </ext:rbac>
</changeSet>

У цьому прикладі налаштовуються права доступу для трьох ролей:

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

  • editor має доступ на читання та оновлення (update) даних. Ця роль дозволяє вносити зміни, але не видаляти записи.

  • admin має повний доступ, включаючи видалення записів (delete), що забезпечує найвищий рівень доступу.

2. Налаштування RBAC для критеріїв пошуку

За замовчуванням, коли роль має доступ до таблиці, ця роль автоматично отримує доступ до всіх критеріїв пошуку (Search Conditions), пов’язаних із цією таблицею. Це може призвести до надмірного поширення прав доступу, коли користувач має доступ до пошукових умов, до яких він не повинен мати доступ.

2.1. Налаштування прав доступу для критеріїв пошуку

Для більшої гнучкості можна окремо налаштовувати права доступу для критеріїв пошуку. Це робиться через тег <ext:searchCondition>, який можна використовувати в межах іншого тегу <ext:role>. Таким чином, доступ до конкретних критеріїв пошуку можна налаштувати незалежно від доступу до таблиці.

2.1.1. Приклад налаштування для критеріїв пошуку

Припустимо, є таблиця project_data і критерій пошуку search_active_projects. Права доступу можна налаштувати окремо для таблиці та критерію пошуку:

<changeSet id="roles" author="registry owner">
    <comment>SET PERMISSIONS</comment>
    <ext:rbac>
        <ext:role name="officer">
            <ext:table name="project_data" read="true"/>
        </ext:role>
        <ext:role name="op-regression">
            <ext:table name="project_data" read="true"/>
        </ext:role>
        <ext:role name="op-regression">
            <ext:searchCondition name="search_active_projects"/>
        </ext:role>
    </ext:rbac>
</changeSet>

У цьому прикладі:

  • Ролі officer і op-regression мають доступ на читання до таблиці project_data.

  • Критерій пошуку search_active_projects доступний лише для ролі op-regression.

Таким чином, доступ до пошуку буде можливий для користувачів, які мають роль op-regression, що дозволяє точніше контролювати доступ до конкретних критеріїв пошуку.

2.1.2. Принципи роботи RBAC для критеріїв пошуку

RBAC на рівні критеріїв пошуку працює за принципом звуження доступу відносно прав доступу до таблиць. Наприклад, якщо доступ до таблиці project_data налаштований для ролей officer і op-regression, а доступ до критерію пошуку search_active_projects — лише для ролі op-regression, то пошук можна виконати, якщо користувач має роль op-regression.

3. Динамічне оновлення RBAC-конфігурацій в одному changeSet

Кожен новий changeSet із конфігураціями RBAC перезаписує попередні налаштування. Тому рекомендується використовувати окремий файл для конфігурацій RBAC, наприклад, data-model/role_permission.xml (див. Моделювання бізнес-процесів та розмежування прав доступу (RBAC)).

Щоб уникнути необхідності копіювати попередні налаштування в кожному новому changeSet-і, можна застосувати підхід, який дозволяє керувати RBAC в одному changeSet-і. Використання атрибута runAlways="true" та додавання тегу <validCheckSum>ANY</validCheckSum> забезпечують виконання changeSet-у при кожному оновленні.

<changeSet id="roles" author="registry owner" runAlways="true">
    <validCheckSum>ANY</validCheckSum>
    <ext:rbac>
        <ext:role name="admin">
            <ext:table name="employee_data" read="true" update="true" delete="true"/>
        </ext:role>
    </ext:rbac>
</changeSet>

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

4. Переваги окремого налаштування для критеріїв пошуку

Розширене налаштування RBAC для критеріїв пошуку дає такі переваги:

  • Точний контроль доступу до пошукових умов, що знижує ризик несанкціонованих операцій.

  • Гнучкість у налаштуванні доступу, що дозволяє створювати різні сценарії доступу до даних.

  • Підвищена безпека, оскільки користувачі отримують доступ лише до тих даних і пошукових умов, які відповідають їхнім ролям.

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