Changes between Initial Version and Version 1 of Documentatie/Ontwikkelaar/OpenAC3/Acl-aliassen


Ignore:
Timestamp:
06/03/21 12:57:53 (5 years ago)
Author:
henk
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Documentatie/Ontwikkelaar/OpenAC3/Acl-aliassen

    v1 v1  
     1[[TOC(heading=ACL-aliassen)]] 
     2[[TOC(heading=OpenAC3, sectionindex, compact, depth=3, allactive, Documentatie/Ontwikkelaar/OpenAC3/)]] 
     3[[TOC(heading=Ontwikkelaar, sectionindex, compact, depth=2, allactive, Documentatie/Ontwikkelaar/)]] 
     4[[TOC(heading=Documentatie, sectionindex, compact, depth=1, allactive, Documentatie/)]] 
     5 
     6= ACL-aliassen = 
     7== Inleiding == 
     8In 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. 
     9 
     10Als 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. 
     11 
     12Voorbeeld: patiënt A heeft behandeling B. Behandeling B bevat behandeldag C. Het pad naar behandeldag C is dan patient(A)/behandelingen(B)/behandeldagen(C). 
     13 
     14ACL-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" 
     15 
     16== Wat zijn ACL-aliassen == 
     17Met 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.  
     18 
     19Een 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.  
     20 
     21Plandagen 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. 
     22 
     23Een ACL-alias bestaat uit 3 onderdelen: 
     24* een naam (het fictieve pad) 
     25* een entiteit (het oorspronkelijke pad) 
     26* een conditie (welk veld moet welke waarde hebben) 
     27 
     28Voor richtafspraken is de volgende alias gedefinieerd: 
     29* naam: "patient/behandelingen/richtdagen" 
     30* entiteit: "patient/behandelingen/plandagen" 
     31* conditie: "status:richtafspraak" 
     32 
     33OpenAC 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. 
     34 
     35== Implementatie in OpenAC 3 == 
     36Toepassen 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. 
     37 
     38OpenAC 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. 
     39 
     40OpenAC 3 filtert de *structuur* op ACL-toegangsrechten en haalt alleen gegevens op met minimaal +R-rechten.  
     41 
     42ACL-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. 
     43 
     44Een ACL-Alias is gebaseerd op een inhoudelijke conditie. Hier is filtering vooraf dus niet mogelijk. 
     45 
     46=== Functionele beschrijving === 
     47 
     48Als 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 worden deze alleen toegevoegd als de gebruiker +R-rechten heeft volgens de alias-ACL. 
     49 
     50=== Technische beschrijving === 
     51==== method OpenAC.GetAclAliassen (nieuw) ==== 
     52GetAclAliassen haalt alle ACL-aliassen op uit de database. 
     53 
     54==== property OpenAC.AclList (gewijzigd) ==== 
     55In de getter van AclList worden met GetAclAliassen de ACL-aliassen opgehaald en aan de ACL-list toegevoegd 
     56 
     57==== method AclList.AddAlias (nieuw) ==== 
     58AddAlias voegt een alias toe aan de ACL-list. Elke ACL-pad kan 0, 1 of meerdere aliassen hebben. 
     59 
     60==== method AclList.GetAliasses (nieuw) ==== 
     61GetAliasses geeft een lijst van aliassen terug voor een pad. 
     62 
     63==== method AclList.Get (gewijzigd) ==== 
     64Na het bepalen van de ACL voor een pad wordt gekeken of er aliassen zijn voor dit pad. Zo ja, de aliassen aan de ACL toegevoegd met ACL.SetAlias 
     65 
     66==== method Acl.Equals (nieuw) ==== 
     67Equals bepaalt of de meegegeven ACL wat rechten betreft gelijk is aan de huidige instantie. 
     68 
     69==== property Acl.HasAlias (nieuw) ==== 
     70HasAlias geeft aan of de ACL minimaal één alias heeft. Dit is een property en geen method zodat Acl.HasAlias geserialiseerd wordt. 
     71 
     72==== method Acl.SetAlias (nieuw) ==== 
     73SetAlias koppelt een ACL-alias aan een conditie voor deze ACL. 
     74 
     75==== property Acl.Records (nieuw) ==== 
     76Records is een dictionary waarin database keys worden gekoppeld aan ACL's. 
     77Pseudo code voor gebruik in de client: 
     78if acl.HasAlias: 
     79    if record.key in acl.Record: 
     80        use acl.Record[record.key] 
     81    else: 
     82        use acl 
     83 
     84==== method Acl.AddRecord (nieuw) ==== 
     85AddRecord koppelt een database key aan een ACL en slaat de koppeling op in Acl.Records 
     86 
     87==== method Acl.GetAliasAcl (nieuw) ==== 
     88GetAliasAcl kijkt naar de conditie van elke alias en evalueert of de conditie waar is voor de meegegeven conditie. 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. 
     89 
     90==== method Structuur.SetAcl (nieuw) ==== 
     91SetAcl vervangt Acl door de meegegeven Acl en recursief voor alle child items. 
     92 
     93==== method TabelDbRepo.GetData (gewijzigd) ==== 
     94GetData 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. 
     95 
     96==== method TabelDbRepo.GetRelatedData (gewijzigd) ==== 
     97GetRelatedData 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. 
     98 
     99=== Testscenario's === 
     100Voorbereiding in OpenAC 2:  
     101* maak in een dossier één of meerdere richtafspraken aan of gebruik een dossier met bestaande richtafspraken. Hetzelfde voor definitieve afspraken. 
     102* zoek of maak een gebruiker die lid is van groep 'onderzoeker' 
     103* geef groep 'onderzoeker' alle rechten (+CRUD) op pad 'patient/behandelingen/plandagen' 
     104 
     105Let op: de ACL cacheperiode is lang. Start daarom om te testen OpenAC 3 opnieuw op na elke ACL-wijziging. 
     106 
     1071. Geen leesrechten op alias 
     108* trek voor groep 'onderzoeker' alle rechten in (-CRUD) voor pad 'patient/behandelingen/richtdagen' 
     109* start OpenAC 3, log in met een gebruiker die lid is van 'onderzoeker' en open een dossier met één of meerdere richtdagen en afspraken. 
     110* controleer of definitieve afspraken zichtbaar zijn maar richtafspraken niet. 
     111 
     112 
     1132. Leesrechten op alias maar geen mutatierechten 
     114* stel voor groep 'onderzoeker' de rechten voor pad 'patient/behandelingen/richtdagen' in op +R,-CUD 
     115* start OpenAC 3, log in met een gebruiker die lid is van 'onderzoeker' en open een dossier met één of meerdere richtdagen en afspraken. 
     116* controleer of zowel definitieve- als richtafspraken zichtbaar zijn in het dossier. 
     117* open een definitieve afspraak. Controleer of de velden wijzigbaar zijn. Open een richtafspraak. Controleer of de velden readonly zijn. 
     118 
     119Als beide tests slagen functioneert de ACL-alias 'patient/behandelingen/richtdagen' voor pad 'patient/behandelingen/plandagen' naar behoren. 
     120 
     121