Bij het designen van de database voor een ERP systeem heb ik voor user rights management de volgende structuur uitgewerkt.

Er ontbreken vrij veel attributen in de kolommen maar die zijn nu niet relevant.
Een rule permission wordt is op 3 verschillende manieren in te stellen. Namelijk: “Allow”, “Disallow” en “Not Specified”.
Een voorbeeld:
- Er bestaat een ProductRule R (bv View product prices).
- User U wil van Product P de prijzen bekijken.
- User U is lid van usergroep UG en UH.
- Product P is lid van productGroep PG
Er zijn hier in totaal 6 policies van kracht, namelijk:
- R -> PG -> UG
- R -> PG -> UH
- R -> PG -> U
- R -> P -> UG
- R -> P -> UH
- R -> P -> U
Normaal zullen de meeste van deze permissions “Not Specified” zijn
Strong security is van kracht. Hiermee bedoel ik dat eenmaal er een “Disallow” aanwezig is het eindresultaat van de security check “Disallow” is.
Vb:
A = Allow | DA = Disallow | NS = Not Specified
A + DA + A => DA
A + NS + NS => A
A + NS + DA => DA
NS + NS + NS => DA
Voor de algemene regels (tabel Rule) heb ik een policy parser uitgewerkt die bij het inloggen van de gebruiker zijn SecurityPolicy en de SecurityPolicies van de usergroeps waarvan hij lid is ophaalt uit de database en een eenduidige policy opstelt die actief zal zijn.
Nu zoeken ik een oplossing voor het ontwerpen/ontwikkelen van een security engine die zowel makkelijk in gebruik en snel genoeg is.
Het grootste performance probleem doet zich wellicht voor als een gebruiker een ongestructureerde (fulltext search) productlijst opvraagt.
Ik ben reeds tot de volgende oplossingen gekomen:
Oplossing 1
Hoofdprobleem hier is volgens mij performance wegens de vele queries die moeten uitgevoerd worden.
Oplossing 2

Hier kan een groot gedeelte van de security checks ingebouwd worden in het search sql statement. Dus goeie performance; enkel de modulariteit is niet meer aanwezig aangezien de security engine een sterke notie moet hebben over alle objecten waar security van kracht is (bv producten, klanten, orders, …)
Oplossing 3
Zoals het voorgaande maar in plaats van de Security Engine die het search statement uitvoert dit door de Search Engine laten doen en deze dus een notie van security geven.
Oplossing 4
De security inbouwen in de DAO zodat alle checks daar afgehandeld worden. Het nadeel is dat alle security logica gedecentraliseerd is en zich her en der tussen alle DAO logica zal bevinden.
===============================================================
Sorry dat het zo een chaotisch geworden is. Hopelijk is het duidelijk en ander vraag je het maar dan zal ik nogmaals mijn best doen om het geheel te verduidelijken.
Zoals je ziet is dit een vrij complex geheel. Aangezien ik er zelf niet uit raak stel ik hier de vraag of er mensen zijn die ervaring hebben met dergelijke dingen en advies kunnen geven of gewoon een betere oplossingen kennen.
De taal die gebruikt zal worden voor ontwikkeling is Java in combinatie met het Spring framework en J2EE. Misschien dat Spring of J2EE voor dergelijke zaken reeds een standaard oplossing voor heeft waar ik nog niet van weet.

Er ontbreken vrij veel attributen in de kolommen maar die zijn nu niet relevant.
Een rule permission wordt is op 3 verschillende manieren in te stellen. Namelijk: “Allow”, “Disallow” en “Not Specified”.
Een voorbeeld:
- Er bestaat een ProductRule R (bv View product prices).
- User U wil van Product P de prijzen bekijken.
- User U is lid van usergroep UG en UH.
- Product P is lid van productGroep PG
Er zijn hier in totaal 6 policies van kracht, namelijk:
- R -> PG -> UG
- R -> PG -> UH
- R -> PG -> U
- R -> P -> UG
- R -> P -> UH
- R -> P -> U
Normaal zullen de meeste van deze permissions “Not Specified” zijn
Strong security is van kracht. Hiermee bedoel ik dat eenmaal er een “Disallow” aanwezig is het eindresultaat van de security check “Disallow” is.
Vb:
A = Allow | DA = Disallow | NS = Not Specified
A + DA + A => DA
A + NS + NS => A
A + NS + DA => DA
NS + NS + NS => DA
Voor de algemene regels (tabel Rule) heb ik een policy parser uitgewerkt die bij het inloggen van de gebruiker zijn SecurityPolicy en de SecurityPolicies van de usergroeps waarvan hij lid is ophaalt uit de database en een eenduidige policy opstelt die actief zal zijn.
Nu zoeken ik een oplossing voor het ontwerpen/ontwikkelen van een security engine die zowel makkelijk in gebruik en snel genoeg is.
Het grootste performance probleem doet zich wellicht voor als een gebruiker een ongestructureerde (fulltext search) productlijst opvraagt.
Ik ben reeds tot de volgende oplossingen gekomen:
Oplossing 1
Hoofdprobleem hier is volgens mij performance wegens de vele queries die moeten uitgevoerd worden.
Oplossing 2

Hier kan een groot gedeelte van de security checks ingebouwd worden in het search sql statement. Dus goeie performance; enkel de modulariteit is niet meer aanwezig aangezien de security engine een sterke notie moet hebben over alle objecten waar security van kracht is (bv producten, klanten, orders, …)
Oplossing 3
Zoals het voorgaande maar in plaats van de Security Engine die het search statement uitvoert dit door de Search Engine laten doen en deze dus een notie van security geven.
Oplossing 4
De security inbouwen in de DAO zodat alle checks daar afgehandeld worden. Het nadeel is dat alle security logica gedecentraliseerd is en zich her en der tussen alle DAO logica zal bevinden.
===============================================================
Sorry dat het zo een chaotisch geworden is. Hopelijk is het duidelijk en ander vraag je het maar dan zal ik nogmaals mijn best doen om het geheel te verduidelijken.
Zoals je ziet is dit een vrij complex geheel. Aangezien ik er zelf niet uit raak stel ik hier de vraag of er mensen zijn die ervaring hebben met dergelijke dingen en advies kunnen geven of gewoon een betere oplossingen kennen.
De taal die gebruikt zal worden voor ontwikkeling is Java in combinatie met het Spring framework en J2EE. Misschien dat Spring of J2EE voor dergelijke zaken reeds een standaard oplossing voor heeft waar ik nog niet van weet.
