Моделювання бізнес-процесів за умови підтримки розмежування прав доступу (RBAC)
Сторінка технічної документації є баченням майбутньої реалізації, актуальність якого може бути застарілою. |
Розмежування прав доступу до даних
Більше про саму підтримку розмежування прав доступу на рівні фізичної моделі тут.
Налаштування ролей та прав доступу
Перед моделюванням бізнес-процесів треба для початку треба встановити які є ролі у модельованому реєстрі та визначити їх у Gerrit репозиторії реєстру:
-
roles/officer.yml — для визначення ролей посадових осіб;
-
roles/citizen.yml — для визначення ролей отримувачів послуг реєстру.
Після встановлення та визначення ролей у відповідних файлах, можна розмежовувати права доступу та описати їх у визначених файлах:
-
bp-auth/officer.yml — для розмежування прав доступу на рівні бізнес-процесів для посадових осіб;
-
bp-auth/citizen.yml — для розмежування прав доступу на рівні бізнес-процесів для отримувачів послуг;
-
data-model/role_permission.xml — для розмежування прав доступу на рівні моделі даних.
Після розмежування ролей та прав доступу, можна переходити до моделювання бізнес-процесу.
Визначення ролей чиновників/громадян
Для того, щоб визначити ролі чиновників/громадян треба їх описати у відповідних файлах (roles/officer.yml
, roles/citizen.yml
), які являють собою список ролей, у форматі:
roles:
- name: officer-1
description: 'Перша роль чиновника'
- name: officer-2
description: 'Друга роль чиновника'
Імена ролей повинні бути написані латиницею та виключно у нижньому регістрі. |
Розмежування прав доступу на рівні бізнес-процесів
Для розмежування прав доступу на рівні бізнес-процесів треба описати їх у відповідних файлах (bp-auth/officer.yml
, bp-auth/citizen.yml
) у форматі:
authorization:
realm: 'officer'
process_definitions:
- process_definition_id: first-business-process
process_name: "Ім'я першого процесу"
process_description: 'Опис першого процесу'
roles:
- officer-1
- process_definition_id: second-business-process
process_name: "Ім'я другого процесу"
process_description: 'Опис другого процесу'
roles:
- officer-1
- officer-2
Імена ролей, реалм та process_definition_id повинні бути написані латиницею
|
Таким чином у Camunda буде згенеровано 3 авторизації:
-
READ
,CREATE_INSTANCE
для ролі/групиofficer-1
для процесуfirst-business-process
-
READ
,CREATE_INSTANCE
для ролі/групиofficer-1
для процесуsecond-business-process
-
READ
,CREATE_INSTANCE
для ролі/групиofficer-2
для процесуsecond-business-process
Тобто роль officer-1
матиме доступ до старту обох процесів, а officer-2
тільки для другого.
Моделювання бізнес-процесів
Розмежування прав доступу на виконання задач бізнес-процесу
У Camunda є можливість розмежування прав доступу на окремі задачі. Для цього треба в Camunda Modeler обрати один з можливих element-template:
-
Citizen Sign Task — використовується для визначення підписуючої задачі людини (може бути доступна тільки ініціатору бізнес-процесу)
-
Officer Sign Task — використовується для визначення підписуючої задачі чиновника
-
User form — використовується для визначення не підписуючої (звичайної) задачі
У випадку якщо було обрано підписуючу задачу чиновника або звичайну задачу у шаблоні є 3 поля для надання прав доступу до задачі
-
Assignee
— може бути${initiator}
, (щоб заасайнити задачу одразу на користувача, що ініціював бізнес-процес) або ідентифікатор користувача (для того, щоб заасайнити задачу на одного чітко визначеного користувача)
Ідентифікатором користувача є preferred_user_name встановлений у Keycloak
|
Якщо було визначено Для використовування |
-
Candidate users
— список користувачів (написаних через кому) для яких задача доступна для виконання, в рамках бізнес-процесу кожен користувач може цю задачу заасайнити на себе та виконати -
Candidate roles
— список ролей (написаних через кому) для яких задача доступна для виконання, в рамках бізнес-процесу кожен користувач, що має хоча б одну з цих ролей може цю задачу заасайнити на себе та виконати (навіть якщо у нього немає доступу до самого бізнес-процесу, наприклад бізнес-процесbp1
може ініціювати лише користувач з роллюofficer-bp1
, хоча задачу в цьому бізнес-процесі, яка доступна роліofficer-task
може виконати користувач лише маючи одну регламенту рольofficer-task
)
Candidate users та Candidate roles працюють в парі, бо на них тільки створюється авторизація у Camunda
|
Відповідність доступів користувачів до бізнес-процесу/задач та до фізичної моделі даних фабрики
Оскільки запити до Дата-Фабрики відправляються від імені користувача, то треба бути уважним при моделюванні такого запиту, так, як користувач має мати доступ до запитаних даних. У моделері передача токену виглядає так:
Джерелом токену для делегатів-конекторів до фабрики є Ceph документ окремої виконаної користувацької задачі.
Тобто користувач задача якого була використана як джерело токену повинен мати роль для якої налаштований доступ до запитаного ресурсу (registration
на рисунку).
Для того, щоб бути впевненим що користувач який виконує задачу має доступ до даних, треба змоделювати процес так, щоб використовувалась одна й та ж роль для дата-моделі та задачі.
-
У задачі Activity-shared-sign-app-include визначено
Candidate Roles
якofficer-sign-app,officer-sing-app2
та токен з цієї задачі використовується для створенняregistration
у фабриці. У цьому випадку обидві роліofficer-sign-app
таofficer-sing-app2
повинні мати доступ на створенняregistration
. -
У задачі Activity-shared-sign-app-include визначено
Assignee
як${initiator}
(з файлівbp-auth/officer.yml
таbp-auth/citizen.yml
відомо що ініціювати бізнес-процес можуть роліofficer-1
,officer-2
таofficer-3
) та токен з цієї задачі використовується для створенняregistration
у фабриці. У цьому випадку всі ролі що мають доступ до ініціювання цього бізнес-процесу (officer-1
,officer-2
таofficer-3
) повинні мати доступ на створенняregistration
.
Приклади моделювання із RBAC
Припустимо, що для моделювання бізнес-процесу із RBAC існує функція Синтаксис -
Також припустимо, що при старті бізнес-процесу створюється об’єкт |
Моделювання ситуації, коли дані з фабрики потрібні після виконання задачі користувачем:
![data connector after user task](../_images/archive/data-connector-after-user-task.png)
Моделювання ситуації, коли дані з фабрики потрібні перед виконанням першої задачі яка розподілена на ініціатора бізнес-процесу:
![data connector after start event](../_images/archive/data-connector-after-start-event.png)
Моделювання ситуації, коли дані з фабрики потрібні перед виконанням задачі:
![data connector before user task with right access](../_images/archive/data-connector-before-user-task-with-right-access.png)
У цьому випадку треба змоделювати проміжну задачу, яка дасть можливість зчитати токен з потрібним доступом
![intermediate task example](../_images/archive/intermediate-task-example.png)