wiki:Documentatie/Ontwikkelaar/OpenAC3/Acl-aliassen

TOC(heading=ACL-aliassen)? TOC(heading=OpenAC3, sectionindex, compact, depth=3, allactive, Documentatie/Ontwikkelaar/OpenAC3/)? TOC(heading=Ontwikkelaar, sectionindex, compact, depth=2, allactive, Documentatie/Ontwikkelaar/)? TOC(heading=Documentatie, sectionindex, compact, depth=1, allactive, Documentatie/)?

ACL-aliassen

Inleiding

In OpenAC worden toegangsrechten ondermeer bepaald door een ACL. Met de ACL worden C(reate), R(ead), U(pdate) en D(elete) rechten op een pad toegewezen aan gebruikersgroepen en gebruikers.

Als je het dossier ziet als informatieboom dan kan elk blad in de boom worden geadresseerd met een route van de wortel naar het blad. Deze route heet in OpenAC termen een pad, de wortel is meestal een patiënt.

Voorbeeld: patiënt A heeft behandeling B. Behandeling B bevat behandeldag C. Het pad naar behandeldag C is dan patient(A)/behandelingen(B)/behandeldagen(C).

ACL-rechten gelden altijd voor alle items die kunnen worden geadresseerd met een pad met een bepaald patroon. Dus alle behandeldagen in plaats van behandeldag(C). Daarom is het ACL-pad altijd generiek in plaats van specifiek, bijvoorbeeld "patient/behandelingen/behandeldagen"

Wat zijn ACL-aliassen

Met een ACL-alias definieer je een fictief pad waaraan je rechten kunt toewijzen als ware het een echt pad. Dit kan door op basis van een inhoudelijke conditie rechten toe te kennen die afwijken van standaardrechten op een pad.

Een voorbeeld is rechten op richtafspraken, afspraken en annuleringen. Deze items worden alledrie opgeslagen in tabel plandag_data maar ze hebben een andere status: richtafspraak, definitief of geannuleerd.

Plandagen hangen altijd aan een behandeling, dus het standaard ACL-pad is "patient/behandelingen/plandagen". Het is wenselijk om wat rechten betreft onderscheid te kunnen maken tussen richtafspraken en definitieve afspraken. Dat onderscheid kan gemaakt worden met een ACL-alias op basis van de inhoud van veld plandag.status.

Een ACL-alias bestaat uit 3 onderdelen:

  • een naam (het fictieve pad)
  • een entiteit (het oorspronkelijke pad)
  • een conditie (welk veld moet welke waarde hebben)

Voor richtafspraken is de volgende alias gedefinieerd:

  • naam: "patient/behandelingen/richtdagen"
  • entiteit: "patient/behandelingen/plandagen"
  • conditie: "status:richtafspraak"

OpenAC zorgt ervoor dat voor plandagen met status "richtafspraak" de toegangsrechten voor "patient/behandelingen/richtdagen" van toepassing zijn. Op plandagen met een andere status zijn de toegangsrechten voor "patient/behandelingen/plandagen" van toepassing.

Implementatie in OpenAC 3

Toepassen van de ACL gebeurt in OpenAC 3 iets anders dan in OpenAC 2. OpenAC 3 past de ACL toe voordat gegevens worden opgehaald. OpenAC past de ACL toe pas nadat gegevens zijn opgehaald.

OpenAC 2 haalt altijd alle gegevens op, inclusief gegevens die niet mogen worden ingezien (-R in de ACL). Vervolgens beeldt OpenAC 2 alleen gegevens met +R-rechten af.

OpenAC 3 filtert de *structuur* op ACL-toegangsrechten en haalt alleen gegevens op met minimaal +R-rechten.

ACL-filtering vooraf is veiliger dan filtering achteraf omdat niet-geautoriseerde gegevens niet over de lijn gaan. Filtering vooraf is ook sneller omdat gegevens die niet mogen worden ingezien ook niet worden opgehaald.

Een ACL-Alias is gebaseerd op een inhoudelijke conditie. Hier is filtering vooraf dus niet mogelijk.

Functionele beschrijving

Als een record is opgehaald en er bestaat een ACL-alias voor het pad van dit record, dan wordt de oorspronkelijke ACL vervangen door de ACL van de alias. Als het record child records heeft (bijv. patient.behandelingen) en er bestaat een ACL-alias voor het pad van de kinderen, dan wordt een kind alleen toegevoegd als de gebruiker +R-rechten heeft volgens de alias-ACL.

Technische beschrijving

method OpenAC.GetAclAliassen (nieuw)

GetAclAliassen haalt alle ACL-aliassen die in gebruik zijn op uit de database. Aliassen die voor geen enkele gebruiker of gebruikersgroep zijn geconfigureerd, en dus niet voorkomen in acl_data, worden niet teruggeleverd.

property OpenAC.AclList (gewijzigd)

In de getter van AclList worden de ACL-aliassen opgehaald met GetAclAliassen en aan de ACL-list toegevoegd

method AclList.AddAlias (nieuw)

AddAlias voegt een alias toe aan de ACL-list. Elke ACL-pad kan 0, 1 of meerdere aliassen hebben.

method AclList.GetAliasses (nieuw)

GetAliasses geeft een lijst van aliassen terug voor een pad.

method AclList.Get (gewijzigd)

Na het bepalen van de ACL voor een pad wordt gekeken of er aliassen zijn voor dit pad. Zo ja, dan worden de aliassen aan de ACL toegevoegd met ACL.SetAlias

method Acl.Equals (nieuw)

Equals bepaalt of de meegegeven ACL wat rechten betreft gelijk is aan de huidige instantie.

property Acl.HasAlias (nieuw)

HasAlias geeft aan of de ACL minimaal één alias heeft. Dit is een property en geen method zodat Acl.HasAlias geserialiseerd kan worden.

method Acl.SetAlias (nieuw)

SetAlias koppelt een ACL-alias aan een conditie voor deze ACL.

property Acl.Records (nieuw)

Records is een dictionary waarin database keys worden gekoppeld aan ACL's. Pseudo code voor gebruik in de client:

if acl.HasAlias:

if record.key in acl.Record:

use acl.Record[record.key]

else:

use acl

method Acl.AddRecord (nieuw)

AddRecord koppelt een database key aan een ACL en slaat de koppeling op in Acl.Records

method Acl.GetAliasAcl (nieuw)

GetAliasAcl kijkt naar de conditie van elke alias en evalueert of de conditie waar is voor de meegegeven data. Als dat zo is geeft GetAliasAcl de Acl terug die hoort bij deze conditie. GetAliasAcl geeft de huidige instantie terug als geen enkele conditie waar is.

method Structuur.SetAcl (nieuw)

SetAcl vervangt Acl door de meegegeven Acl en recursief voor alle child items.

method TabelDbRepo.GetData (gewijzigd)

GetData evalueert met Acl.GetAliasAcl of er een ACL-alias voor de opgehaalde data. Als dat zo is en de rechten wijken af, dan wordt structuur.Acl met structuur.SetAcl vervangen door de ACL-alias.

method TabelDbRepo.GetRelatedData (gewijzigd)

GetRelatedData evalueert voor elk gerelateerd record of er een ACL-alias voor is. Ala dat zo is dan wordt het record alleen bij +R-rechten aan het parent-record toegevoegd.

Testscenario's

Voorbereiding in OpenAC 2:

  • maak in een dossier één of meerdere richtafspraken aan of gebruik een dossier met bestaande richtafspraken. Hetzelfde voor definitieve afspraken.
  • zoek of maak een gebruiker die lid is van groep 'onderzoeker'
  • geef groep 'onderzoeker' alle rechten (+CRUD) op pad 'patient/behandelingen/plandagen'

Let op: de ACL cacheperiode is lang. Start daarom om te testen OpenAC 3 opnieuw op na elke ACL-wijziging.

  1. Geen leesrechten op alias
  • trek voor groep 'onderzoeker' alle rechten in (-CRUD) voor pad 'patient/behandelingen/richtdagen'
  • start OpenAC 3, log in met een gebruiker die lid is van 'onderzoeker' en open een dossier met één of meerdere richtdagen en afspraken.
  • controleer of definitieve afspraken zichtbaar zijn maar richtafspraken niet.
  1. Leesrechten op alias maar geen mutatierechten
  • stel voor groep 'onderzoeker' de rechten voor pad 'patient/behandelingen/richtdagen' in op +R,-CUD
  • start OpenAC 3, log in met een gebruiker die lid is van 'onderzoeker' en open een dossier met één of meerdere richtdagen en afspraken.
  • controleer of zowel definitieve- als richtafspraken zichtbaar zijn in het dossier.
  • open een definitieve afspraak. Controleer of de velden wijzigbaar zijn. Open een richtafspraak. Controleer of de velden readonly zijn.

Als beide tests slagen functioneert de ACL-alias 'patient/behandelingen/richtdagen' voor pad 'patient/behandelingen/plandagen' naar behoren.

Last modified 2 years ago Last modified on 11/07/23 15:39:47