ABAC: Attribute Based Access Control (ISO/IEC 29146)
====================================================
[](https://github.com/erpuno/abac/actions)
[](https://hex.pm/packages/abac)
Дана бібліотека реалізує систему керування доступом на основі атрибутів (**ABAC**)
згідно з міжнародним стандартом **ISO/IEC 29146:2016** (Information technology — Security techniques — A framework for access management)
та рекомендаціями **NIST SP 800-162**.
## Архітектура (ISO 29146)
Відповідно до стандарту, система розділена на функціональні компоненти:
1. **PDP (Policy Decision Point)** — Точка прийняття рішень (`ABAC.PDP`). Обчислює вердикт (Permit/Deny) на основі політик та атрибутів.
2. **PIP (Policy Information Point)** — Точка інформації про політики (`ABAC.PIP`). Збагачує запит атрибутами з контексту (ERP, BPE, бази даних).
3. **PAP (Policy Administration Point)** — Точка адміністрування. Забезпечує створення та зберігання політик (використовує `KVS`).
4. **PEP (Policy Enforcement Point)** — Точка забезпечення виконання (`ABAC.API`). Перехоплює запити до системи та викликає PDP для отримання дозволу.
## Модель даних
### Запит (Request)
Запит на доступ описується записом `request`, що містить:
* `subject`: Суб'єкт (користувач, сервіс, ERP Employee).
* `endpoint`: API-метод або дія (напр. `VIEW`, `EDIT`, `SIGN`).
* `context`: Додаткові дані оточення (форми, файли, процеси).
### Політики та Правила
* **Policy**: Група правил з алгоритмом комбінування (`all` — логічне "І", `any` — логічне "АБО").
* **Rule**: Атомарна перевірка, що включає:
* `subject_condition`: Умови для суб'єкта (функція перевірки ролей, посад).
* `object_condition`: Умови для об'єкта (функція перевірки стадій, файлів).
* `type`: Тип правила (`auth` для дозволу, `deny` для заборони).
## Імплементація об'єктів
Для державного проєкту реалізовано підтримку специфічних об'єктів:
* **Співробітник (`subject_employee`)**: Перевірка ролей, підрозділів (org/branch) та делегованих повноважень (assistant/delegate).
* **Процес (`object_process`)**: Перевірка стадії бізнес-процесу (BPE) та його статусу.
* **Документ (`object_file`)**: Атрибути ЕЦП (sign), необхідність сертифікації (needCert), тип документа.
* **Форма (`object_form`)**: Ідентифікатори та доступні поля.
## Стандарти та відповідність
* **ISO/IEC 29146:2016** — Архітектурний фреймворк та термінологія.
* **NIST SP 800-162** — Настанови з впровадження ABAC.
* **XACML 3.0** — Логіка обробки (Permit/Deny/NotApplicable/Indeterminate).
Автор
-----
* Максим Сохацький, Інформаційні Судові Системи