Web API a ochrana dat
V rámci zavedení obecné funkcionality ochrany dat do systému ABRA Gen došlo v REST API k určitým změnám, se kterými je při návrhu klientských aplikací zapotřebí počítat, aby během provozu nedocházelo k chybám. Tyto změny byly nezbytné pro plnohodnotnou implementaci ochrany dat. (Viz FAQ Jak se ochrana dat po zapnutí projeví a kde všude se projeví?)
Při práci s jakýmikoli daty obecně je zapotřebí brát v úvahu, že jejich dostupnost závisí na uživatelském účtu, který je používán k zasílání HTTP požadavků - práva jednotlivých uživatelů se obvykle liší.
Ve výchozím nastavení rozhraní se při přístupu přes Web API nastavení ochrany dat nezohledňuje a je zapotřebí jej nejprve zapnout pomocí parametru dataProtection v konfiguračním souboru APIServer.yaml.
Ochrana dat umožňuje znepřístupňovat data uložená v určitých polích (položkách, fieldech) business objektů (BO) konkrétním uživatelům. Jaká pole BO jsou znepřístupněna kterým uživatelům, záleží na konfiguraci ochrany dat (nastavení se liší v rámci každé instalace). Chráněné položky (odpovídající fieldům business objektů) se nastavují v rámci definic ochrany dat. Více informací naleznete v kapitole Jak začít - Ochrana dat a GDPR v ABRA Gen.
V REST API má výše uvedené dopad na výběr, vytváření i aktualizace BO.
- při výběru dat jsou místo obsahu polí se znepřístupněným obsahem vraceny Informační objekty signalizující, že jsou data pro aktuálního uživatele nepřístupná (skrytá)
-
při vytváření a aktualizaci je při pokusu o nastavení hodnoty pole, ke kterému uživatel nemá přístup, buď vrácen status 403 nebo je příslušné pole ignorováno (v závislosti na nastavení režimu aplikace změn)
Uživatelem se rozumí uživatelský účet použitý k zaslání HTTP požadavku.
Při výběru dat je místo obsahu znepřístupněné chráněné položky BO vrácen Informační objekt (viz Tabulka 1). To platí i pro pole obsahující výsledek výrazu (např. pokud vybíráme řetězec složený z několika položek BO, jedna z položek je chráněná a její obsah je aktuálnímu uživateli nepřístupný, je vrácen Informační objekt).
Tabulka 1 - Struktura Informačního objektu | ||
---|---|---|
Vlastnost | Typ | Obsah |
|
|
|
"birthnumber": {
"@protected_value": true
}
V případě, že je kterákoli z položek chráněná (a aktuálnímu uživateli nepřístupná), je součástí vráceného objektu pole @dataprotection s vlastností query_fields, obsahující seznam položek, jejichž obsah není aktuálnímu uživateli přístupný (viz Tabulka 2).
Tabulka 2 - Struktura Objektu informací o chráněných fieldech (@dataprotection) | ||
---|---|---|
Vlastnost | Typ | Obsah |
|
|
Pole dotazu obsahující skrytá/znepřístupněná data (string) |
"@dataprotection": {
"query_fields": [
{
"name": "birthnumber"
},
{
"name": "dateofbirth$date"
}
]
}
Při vytváření nebo aktualizacích BO jsou k dispozici dva různé režimy aplikace změn - striktní a nestriktní.
-
Výchozí režim je striktní (při pokusu o nastavení znepřístupněného chráněného fieldu je vrácen status 403, požadavek se neprovede). Vypnout jej lze nastavením query parametru strictdataprotection na hodnotu false.
POST /{connection}/{kolekce BO}?strictdataprotection=false
- V nestriktním režimu jsou znepřístupněné chráněné fieldy přeskakovány/ignorovány (jejich hodnoty nejsou do BO propsány).
Byly přidány dva typy zdrojů, které umožňují načítat informace o chráněných položkách na business objektech.
Získáme jej zasláním požadavku
GET /{connection}/{kolekce BO}/meta/dataprotection
Vrací seznam fieldů BO, které mohou být chráněny.
Zda jsou data obsažená v daném fieldu konkrétního záznamu danému uživateli přístupná nebo ne, záleží na nastavení ochrany dat - může se pro jednotlivé záznamy lišit.
Výsledkem dotazu na tento zdroj je pole Objektů chráněných fieldů - viz tabulky 3 a 4.
Tabulka 3 - Struktura Objektu chráněných fieldů (pole) | ||
---|---|---|
Vlastnost | Typ | Obsah |
|
|
Obsahuje objekty jednotlivých chráněných fieldů |
Tabulka 4 - Struktura Objektu chráněného fieldu (prvek pole) | ||
---|---|---|
Vlastnost | Typ | Obsah |
|
|
Název chráněného fieldu BO |
{
"object_fields": [
{
"name": "dateofbirth$date"
},
{
"name": "birthnumber"
}
]
}
Získáme jej zasláním požadavku
GET /{connection}/{kolekce BO}/{id}/meta/dataprotection
Požadavek vrací seznam chráněných fieldů, které jsou na daném business objektu aktuálnímu uživateli znepřístupněny.
Výsledkem dotazu na tento zdroj je pole Objektů chráněného fieldu - viz tabulky 5 a 6.
Tabulka 5 - Struktura Objektů chráněných fieldů (pole) | ||
---|---|---|
Vlastnost | Typ | Obsah |
|
|
Obsahuje objekty jednotlivých chráněných fieldů, jejichž obsah je aktuálnímu uživateli znepřístupněn |
Tabulka 6 - Struktura Objektu chráněného fieldu (prvek pole) | ||
---|---|---|
Vlastnost | Typ | Obsah |
|
|
Název fieldu BO |
|
|
|
{
"object_fields": [
{
"name": "dateofbirth$date",
"accessible": false
},
{
"name": "birthnumber",
"accessible": false
}
]
}
Kromě ochrany dat ve smyslu obecné funkcionality ochrany dat, která je předmětem této kapitoly, Web API zohledňuje také efektivní práva aktuálního uživatele k chráněným objektům. Více informací naleznete v kapitole Autentizace a autorizace, v sekci Přístup k chráněným objektům.