Benutzer-Werkzeuge

Webseiten-Werkzeuge


engine:procedures:pm_modifypchaccresforuser_ad

pm_ModifyPChAccResForUser_Ad

Prozedur zum Anlegen, Bearbeiten und Löschen von Zugriffsbeschränkungen auf Personen-Merkmale für (Datenbank-)Benutzer.

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).

Hinweis :

Es gibt bestimmte Einstellungen, die verhindern, dass eine Zugriffsbeschränkung eingerichtet werden kann, wenn das entsprechende Merkmal zu mindestens einer dieser Einstellungen konfiguriert ist :

  • „CharacteristicIDsForAuthor_<PersonTypeID>“ („ForumSettings“) :

Wenn „PersonCharacteristicID“ zur Einstellung konfiguriert ist, darf keine Einschränkung des lesenden Zugriffs vorgenommen werden

  • „PersonCharacteristicIDsGrantedByUniqueID_Details“ („PersonTypeSettings“) :

Wenn „PersonCharacteristicID“ zur Einstellung konfiguriert ist, darf keine Einschränkung des lesenden Zugriffs vorgenommen werden

  • „CharacIDsFor_pm_SetPropertyOfOnePerson_Pu“ („PersonTypeSettings“) :

Wenn „PersonCharacteristicID“ zur Einstellung konfiguriert ist, darf weder das Bearbeiten noch das Löschen oder die Neuanlage eingeschränkt werden

  • „IdentifyingCharacteristicID“ („CommunitySettings“) :

Wenn „PersonCharacteristicID“ zur Einstellung konfiguriert ist, darf keine Einschränkung des lesenden Zugriffs vorgenommen werden.

Anmerkungen zum Parameter „AccessRestriction“ und „ReadAccessRestrictionPattern“ :

1. Der anzugebende Wert in „AccessRestriction“ sind die Beschränkungen als Summe (also „bitmap“) folgender Werte :

  • „1“ : Neu-Anlage von Eigenschaften/Details zum Merkmal verboten
  • „2“ : Ändern von Eigenschaften/Details zum Merkmal verboten
  • „4“ : Löschen von Eigenschaften/Details zum Merkmal verboten
  • „8“ : Zum einen ist das Lesen von Eigenschaften zum Merkmal komplett verboten oder eingeschränkt (je nach „ReadAccessRestrictionPattern“) und zum anderen ist das Lesen von Details komplett verboten. „Komplett verboten“ (im Gegensatz zu „Lesen eingeschränkt gemäß ReadAccessRestrictionPattern“) bedeutet, daß Datensätze zum Merkmal GANZ fehlen.

2. Es kann auch der Wert „0“ für „AccessRestriction“ übergeben werden, um explizit „KEINE Zugriffsbeschränkung“ zu definieren - sinnvoll wenn eine AUSNAHME konfiguriert werden soll (weil z.B. „global“ eine Beschränkung definiert ist).

3. In „ReadAccessRestrictionPattern“ ist immer „NULL“ anzugeben, wenn KEIN Lese-Verbot bzw. KEINE Lese-Beschränkung angegeben wurde (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 :

  • „#left(<n>)#“ : nur die ERSTEN n Zeichen der Eigenschaft zum Merkmal werden ausgegeben
  • „#right(<n>)#“ : nur die LETZTEN n Zeichen der Eigenschaft zum Merkmal werden ausgegeben

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 „AccessRestriction“ und „ReadAccessRestrictionPattern“ :

1. Soll der Benutzer „UserID“ zum Merkmal „PersonCharacteristicID“ keine neuen Eigenschaften/Details anlegen und keine bestehenden Eigenschaften bzw. Details löschen können, aber uneingeschränkten lesenden Zugriff erhalten und bereits bestehende Eigenschaften bzw. Details zum Merkmal ändern dürfen, übergibt man für „AccessRestriction“ den Wert „5“, sprich die Summe der Werte „1“ (Neu-Anlage verboten) und „4“ (Löschen verboten). „ReadAccessRestrictionPattern“ ist bedeutungslos, daher also „NULL“.

2. Soll der Benutzer „UserID“ eine Eigenschaft zum Merkmal „PersonCharacteristicID“ zwar anlegen und ändern dürfen, möchte man ihm aber zum einen verwehren, Eigenschaften dazu zu löschen und zum anderen Datenätze zum Merkmal überhaupt zu sehen, übergibt man den Wert „12 für „AccessRestriction“ - was der Summe aus „4“ (Löschen verboten) und „8“ (Lesen verboten oder eingeschränkt) entspricht. Da der lesende Zugriff komplett verboten sein soll, ist in „ReadAccessRestrictionPattern“ nichts (also „NULL“) anzugeben.
Anmerkung : Realistischer Anwendungsfall für so ein Szenario ist z.B. ein „internes Merkmal“ der Art „Bonitätsindex“, das für den „publicuser“ („UserID = 0“) beschränkt werden soll. Dieses wird auf der Webseite - auf der in aller Regel die Prozedur-Aufrufe durch den Benutzer „publicuser“ erfolgen - zwar gesetzt (aufgrund von webservice-Calls auf entsprechende Dienstleister z.B.), das soll aber dem Kunden auf der Webseite verborgen bleiben und nicht etwa aufgrund eines Programmierfehlers (durch den allein schon zu erkennen ist, daß es das Merkmal überhaupt gibt) doch sichtbar sein (und gelöscht werden soll die Eigenschaft auch nicht aus Versehen).

HTTP-MethodPOST
HTTP-AuthOptional
Aliaspm_ModifyPersonCharacteristicAccessRestrictionsForUsers_Ad
Tags
Engine-Kategorieperson management
Engine-TypDaten-Änderung
Letzte Aktualisierung7.0.7 (2015-01-29)

Parameter

Name 1) Standard-Wert Beschreibung 2) SQL-Datentyp3) ab Version
UserID ID eines „dStore“-Benutzers, der in „UserInfo“ registriert ist (siehe mi_GetUserInfo_Ad), für den eine Zugriffsbeschränkung angelegt/geändert/gelöscht werden soll
smallint6.5.2
PersonCharacteristicID ID eines Personen-Merkmals für das die Zugriffsbeschränkung gilt. Ist „Delete = 0“ und existiert für „UserID“ noch keine Beschränkung zu diesem Merkmal, wird sie angelegt, ansonsten geändert.
smallint6.5.2
AccessRestriction Zugriffsbeschr. als Summe dieser 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.
tinyint6.5.2
ReadAccessRestrictionPatternNULL Nur bei les. Beschr. („AccessRestriction & 8 = 8“) relev. Mögl. Werte:
- “#left(<n>)#„ : ERSTE n („0“ mögl.) Zeichen d. Eig. zurückgeb.
- “#right(<n>)#„ : LETZTE n („0“ mögl.) Zeichen d. Eig. zurückgeb.
- NULL : Datensätze zum Merkmal nicht zurückgeb.
varchar(100)6.5.2
Delete0 „1“ angeben, um die bestehende Beschränkung für „UserID“ zum Merkmal „PersonCharacteristicID“ zu löschen. Ansonsten (bei „0“) wird eine neue Beschränkung angelegt bzw. die vorhandene geändert.
bit6.5.2

Rückgabe

Die Prozedur hat keine Rückgaben.

Output-Parameter

Die Prozedur hat keine Output-Parameter.

Mögliche Return-Codes

Code Beschreibung Quelle 4)
-698Zugriffsbeschränkung kann nicht geändert werden, da eine Einstellung existiert die dies verhindertnur direkt
-570Nur der Super-Admin darf diese Prozedur (mit diesen Parametern) ausführennur direkt
-569Der Benutzer hat kein Ausführungsrecht für die Prozedurnur indirekt
-567Die Prozedur darf z. Zt. nicht ausgeführt werdennur indirekt
-566Die Prozedur darf mit den übergebenen Parametern nicht ausgeführt werdennur indirekt
-535Das Datum liegt nicht in der Vergangenheitnur indirekt
-530Der Wert ist nicht konvertierbarnur indirekt
-510Der Benutzer ist nicht registriertnur indirekt
-504Es ist ein Problem aufgetreten, das nicht gelöst werden kann, Prozedur wird daher abgebrochendirekt und indirekt
-502Die Parameter-Werte der Prozedur können nicht verarbeitet werden (kein passendes Trennzeichen)nur indirekt
-500Falsche Parameterdirekt und indirekt

XML-Schema

Die Rückgabe erfolgt als XML-Dokument welches gegen das Schema Response/EngineProcedure_v1_0.xsd validiert.

Historie

7.0.7 2015-01-29Interne Änderung : Datentyp-Erweiterung des „ReferenceKey“ [für „_mi_StartProcedure“-Aufruf]
6.5.2 2013-02-26Erstmalig in dieser Version erstellt

Code-Snippets

Engine Playground

Der folgende Link öffnet in einem separaten Fenster den Engine Playground der fest mit dem dbap-demo System verbunden ist:

cURL

Unformatierte Ausgabe:

curl -X POST  'http://<partner>-<project>.dstore.de/default/engine/pm_ModifyPChAccResForUser_Ad?UserID=<value>&PersonCharacteristicID=<value>&AccessRestriction=<value>'

Mit xmllint 5) formatierte Ausgabe:

curl -X POST  'http://<partner>-<project>.dstore.de/default/engine/pm_ModifyPChAccResForUser_Ad?UserID=<value>&PersonCharacteristicID=<value>&AccessRestriction=<value>' | xmllint --format -
dStore_php
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_ModifyPChAccResForUser_Ad',
		array(
			'UserID' => <value>,
			'PersonCharacteristicID' => <value>,
			'AccessRestriction' => <value>,
			// 'ReadAccessRestrictionPattern' => NULL,
			// 'Delete' => 0
		)
);
 
$service->execute($request);
 
			$xml_result = $request->getResponse()->getBody()->toSimpleXmlDocument();
			$ResultSet = $xml_result->getRowsAsArray();
engine/execute

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_ModifyPChAccResForUser_Ad">
			<Parameters>
				<Parameter Name="UserID"><!-- smallint value --></Parameter>
				<Parameter Name="PersonCharacteristicID"><!-- smallint value --></Parameter>
				<Parameter Name="AccessRestriction"><!-- tinyint value --></Parameter>
				<!-- <Parameter Name="ReadAccessRestrictionPattern">NULL</Parameter> -->
				<!-- <Parameter Name="Delete">0</Parameter> -->
			</Parameters>
		</Procedure>
	</Batch>
</ListOfBatches>
1)
Pflichtparameter sind unterstrichen
4)
direkt meint „von der Prozedur selber“ und indirekt meint „von intern aufgerufenen Unterprozeduren“
5)
I.d.R. auf Unix-artigen Systemen bereits installiert, Bestandteil der libxml2, siehe http://www.xmlsoft.org
engine/procedures/pm_modifypchaccresforuser_ad.txt · Zuletzt geändert: 11.01.2016 (Externe Bearbeitung)