Prozedur zum Anlegen, Bearbeiten und Löschen von Zugriffsbeschränkungen auf Personen-Merkmale für (Datenbank-)Benutzergruppen.
Zum Verständnis - die Logik einer Zugriffsbeschränkung eines Benutzers für ein Merkmal ist diese :
1.) Eine direkt zu einem Benutzer („UserID“) gespeicherte Konfiguration hat Vorrang vor anderen Einstellungen zum selben Merkmal (z.B. zu einer Gruppe, der der Benutzer angehört).
Besonderheit : Es kann auch explizit „AccessRestriction = 0“ konfiguriert sein, was „keine Beschränkung“ bedeutet - sinnvoll wenn für einen Benutzer eine AUSNAHME (weil z.B. „global“, siehe Punkt 3, eine Beschränkung konfiguriert ist) gelten soll.
2.) Falls für ein Merkmal zu einem Benutzer („UserID“) nichts konfiguriert ist, gelten die evtl. vorhandenen Konfigurationen zu Gruppen („UserGroupID“s), denen der Benutzer zugeordnet ist. Da ja eine Zuordnung zu MEHREREN Gruppen vorhanden sein kann und somit für ein Merkmal MEHRERE Konfigurationen in Frage kommen können, wird nach folgender Regel verfahren :
PRO Merkmal gelten die Zugriffsbeschränkungen der Gruppe, denen der Benutzer mit der kleinsten „SortNo“ (bedeutet „höchste Priorität“) zugeordnet ist.
Besonderheit auch hier (wie schon bei Punkt 1) : Es kann „AccessRestriction = 0“ konfiguriert sein, was „keine Beschränkung“ bedeutet.
3.) Nur wenn weder zum Benutzer („UserID“) noch zu einer der Gruppen („UserGroupID“s), denen der Benutzer zugeordnet ist, eine Konfiguration zu einem Merkmal heranzuziehen ist, greift eine evtl. zur speziellen „UserID = -1“ (also „global“) gespeicherte Einstellung.
Wie schon bei den ersten beiden Punkten kann eine „AccessRestriction = 0“-Einstellung herauskommen, was „keine Beschränkung“ bedeutet (weil man z.B. „global keine Beschränkung, aber Einschränkungen für bestimmte Benutzer“ realisieren möchte).
Anmerkungen zu den Rückgabespalten „AccessRestriction“ und „ReadAccessRestrictionPattern“ :
1. „AccessRestriction“ gibt an, welche Beschränkungen (für den Benutzer „RestrictionForUserGroupID“) gelten. Der Wert ist als „bitmap“ zu verstehen, sprich es handelt sich um eine Summe aus folgenden möglichen Werten :
2. Es kann auch der Wert „0“ für „AccessRestriction“ vorkommen, was „KEINE Zugriffsbeschränkung“ bedeutet - sinnvoll wenn eine AUSNAHME gelten soll (weil z.B. „global“ eine Beschränkung definiert ist).
3. Die Spalte „ReadAccessRestrictionPattern“ ist IMMER „NULL“ wenn KEIN Lese-Verbot bzw. KEINE Lese-Beschränkung existiert (wenn also „AccessRestriction & 8 = 0“ ist, sprich der Summand „8“ NICHT in der „AccessRestriction“-Summe vorkommt) ! Andernfalls KANN hier ein „pattern“ stehen, das angibt, welcher Teil von Eigenschaften zurückgegeben wird, also die Art der Beschränkung definiert. „NULL“ bedeutet bei gegebenem Lese-Verbot, daß Datensätze zur Eigenschaft komplett fehlen - für Details gilt dies im Falle eines Leseverbots („AccessRestriction & 8 = 8“) IMMER, sprich „ReadAccessRestrictionPattern“ hat KEINE Bedeutung für Details ! Derzeit sind folgend „pattern“ möglich :
Hinweis : n = 0 ist möglich, was dazu führt, daß anstelle der Eigenschaft „NULL“ ausgegeben wird (egal ob die „ERSTEN 0 Zeichen“ oder die „LETZTEN 0 Zeichen“ definiert ist). Im Gegensatz zum kompletten Lese-Verbot (wenn also „NULL“ im „ReadAccessRestrictionPattern“ steht) kann der Aufrufer so wenigstens erkennen, ob die betreffende Person eine Eigenschaft hat oder nicht (beim kompletten Lese-Verbot fehlt der Datensatz ja gänzlich) !
Beispiele zu den Rückgabespalten „AccessRestriction“ und „ReadAccessRestrictionPattern“ :
1. Kann eine Benutzergruppe zu einem Merkmal keine neuen Eigenschaften/Details anlegen und keine bestehenden Eigenschaften bzw. Details löschen (besitzt aber uneingeschränkten lesenden Zugriff und kann bereits bestehende Eigenschaften bzw. Details zum Merkmal ändern), enthält die Spalte „AccessRestriction“ den Wert „5“, sprich die Summe der Werte „1“ (Neu-Anlage verboten) und „4“ (Löschen verboten). Die Spalte „ReadAccessRestrictionPattern“ ist bedeutungslos, daher also „NULL“.
2. Sollen Benutzer einer Gruppe eine Eigenschaft zu einem Merkmal zwar anlegen bzw. ändern dürfen, und möchte man ihnen auf der anderen Seite verbieten, Eigenschaften dazu einsehen oder löschen zu können, enthält die Spalte „AccessRestriction“ den Wert „12“, was der Summe aus „4“ (Löschen verboten) und „8“ (Lesen verboten oder eingeschränkt) entspricht. Da der lesende Zugriff aber nicht unbedingt KOMPLETT verboten sein soll (die Benutzer der Gruppe also durchaus sehen können sollen, ob eine Eigenschaft vorhanden ist oder nicht) ist, steht in der Spalte „ReadAccessRestrictionPattern“ z.B. „#left(0)#“.
Anmerkung : Realistischer Anwendungsfall für so ein Szenario ist z.B. ein „Passwort-Merkmal“, das für Benutzer z.B. einer Gruppe „Support“ zum einen „verborgen“ sein soll (aber durchaus erkennbar sein soll, ob überhaupt eine Passwort-Eigenschaft vorhanden ist oder nicht), sie aber andererseits ein neues Passwort vergeben können sollen.
HTTP-Method | GET |
HTTP-Auth | Optional |
Alias | pm_GetPersonCharacteristicAccessRestrictionsForGroups_Ad |
Tags | |
Engine-Kategorie | person management |
Engine-Typ | Daten-Ermittlung |
Letzte Aktualisierung | 7.0.7 (2015-01-29) |
Name 1) | Standard-Wert | Beschreibung 2) | SQL-Datentyp3) | ab Version |
---|---|---|---|---|
UserGroupID | NULL | ID einer „dStore“-Benutzer-Gruppe (s. mi_GetUserGroups_Ad), zu der die definierten Zugriffsbeschränkungen auf Personen-Merkmale ermittelt werden sollen | smallint | 6.5.2 |
PersonCharacteristicID | NULL | ID eines Personen-Merkmals. Falls angegeben, werden nur die definierten Zugriffsbeschränkungen für dieses Merkmal ermittelt. | smallint | 6.5.2 |
Spaltenname | Beschreibung | SQL-Datentyp4) | ab Version |
---|---|---|---|
PersonCharacteristicID | Die ID des Merkmals für dessen Eigenschaften/Details die Beschränkung gilt | smallint | 6.5.2 |
RestrictionForUserGroupID | Die ID einer „dStore“-Benutzer-Gruppe (s. mi_GetUserGroups_Ad) für die die Beschränkung gilt. Entspricht natürlich „UserGroupID“ wenn angegeben. | smallint | 6.5.2 |
AccessRestriction | Welche Beschr. gelten. Summe folg. mögl. Werte : - „1“ : Neu-Anlage v. Eigensch./Details verb. - „2“ : Ändern v. Eigensch./Details verb. - „4“ : Löschen v. Eigensch./Details verb. - „8“ : Lesen v. Eigensch. verb./eingeschr. UND Lesen v. Details verb. | tinyint | 6.5.2 |
ReadAccessRestrictionPattern | Welcher Teil der Eigensch. (wenn „AccessRestriction & 8 = 8“) zurückgeg. wird: - „#left(<n>)#“ : die ERSTEN n Zeichen („n = 0“ mögl.) - „#right(<n>)#“ : die LETZTEN n Zeichen („n = 0“ mögl.) - NULL : Datensätze zu „PersonCharacteristicID“ fehlen ganz | varchar(100) | 6.5.2 |
(parameterunabängige Sortierung)
Die Prozedur hat keine Output-Parameter.
Code | Beschreibung | Quelle 5) |
---|---|---|
-569 | Der Benutzer hat kein Ausführungsrecht für die Prozedur | nur indirekt |
-567 | Die Prozedur darf z. Zt. nicht ausgeführt werden | nur indirekt |
-566 | Die Prozedur darf mit den übergebenen Parametern nicht ausgeführt werden | nur indirekt |
-535 | Das Datum liegt nicht in der Vergangenheit | nur indirekt |
-530 | Der Wert ist nicht konvertierbar | nur indirekt |
-510 | Der Benutzer ist nicht registriert | nur indirekt |
-504 | Es ist ein Problem aufgetreten, das nicht gelöst werden kann, Prozedur wird daher abgebrochen | nur indirekt |
-500 | Falsche Parameter | nur indirekt |
Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema Response/EngineProcedure_v1_0.xsd validiert.
7.0.7 | 2015-01-29 | Interne Änderung : Datentyp-Erweiterung des „ReferenceKey“ [für „_mi_StartProcedure“-Aufruf] |
6.5.2 | 2013-02-26 | Erstmalig in dieser Version erstellt |
Der folgende Link öffnet in einem separaten Fenster den Engine Playground der fest mit dem dbap-demo System verbunden ist:
Unformatierte Ausgabe:
curl -X GET 'http://<partner>-<project>.dstore.de/default/engine/pm_GetPChAccRestrForGroups_Ad'
Mit xmllint 6) formatierte Ausgabe:
curl -X GET 'http://<partner>-<project>.dstore.de/default/engine/pm_GetPChAccRestrForGroups_Ad' | xmllint --format -
use dStore_php\WebService; $service = new WebService\Service( WebService\Scheme::HTTP,'<partner>-<project>.dstore.de', 80); $request = new WebService\Requests\Engine\Procedure\Request( new WebService\Requests\AccessData('default'), 'pm_GetPChAccRestrForGroups_Ad', array( // 'UserGroupID' => NULL, // 'PersonCharacteristicID' => NULL ) ); $service->execute($request); $xml_result = $request->getResponse()->getBody()->toSimpleXmlDocument(); $ResultSet = $xml_result->getRowsAsArray();
XML zur Ausführung mit der Methode engine/execute, z.B. per
curl --header 'Content-Type: application/xml' -X POST 'http://<partner>-<kunde>.dstore.de/default/engine/execute' -d '<xml-daten>'
<?xml version="1.0" encoding="UTF-8"?> <ListOfBatches> <Batch No="0"> <Procedure Name="pm_GetPChAccRestrForGroups_Ad"> <Parameters> <!-- <Parameter Name="UserGroupID">NULL</Parameter> --> <!-- <Parameter Name="PersonCharacteristicID">NULL</Parameter> --> </Parameters> </Procedure> </Batch> </ListOfBatches>