Thema - bei der LISt Gesellschaft für Verkehrswesen und ...

Thema - bei der LISt Gesellschaft für Verkehrswesen und ... Thema - bei der LISt Gesellschaft für Verkehrswesen und ...

list.sachsen.de
von list.sachsen.de Mehr von diesem Publisher
20.07.2013 Aufrufe

Anhang Anhang A1 mögliche Geodateninfrastruktur der Sächsischen Straßenbauverwaltung Der Infrastrukturplan wurde als faltbares Poster beigelegt. A2 PostgreSQL Rechteverwaltung Die Umsetzung der Rechteverwaltung unter PostgreSQL-PostGIS ist im Folgenden dargestellt. Der Unterschied zur Oracle Spatial Umsetzung besteht im Wesentlichen in der Programmierung der Trigger des zentrales Views, welche durch den Einsatz von Regeln realisiert wurden. Der zentrale Datenview wurde lediglich bei der Auswahl des aktuellen Nutzers angepasst. Die Änderung ist in nachfolgendem Ausschnitt zu sehen. CREATE OR REPLACE VIEW VIEW as (… WHERE … AND n.DBAnmeldename = (SELECT CURRENT_USER) … UNION ALL (… WHERE a.id NOT IN ( … WHERE …n.DBAnmeldename = (SELECT CURRENT_USER) … Abbildung 18: PostgreSQL zentraler Datenbank-View der Rechteverwaltung 51

Anhang Der Trigger zur Prüfung der Schreibrechte wurde wie folgt umgesetzt: CREATE TRIGGER TRI_Datentabelle_BEFU BEFORE UPDATE ON Datentabelle FOR EACH ROW EXECUTE PROCEDURE function_tri_Datentabelle(); Abbildung 19: PostgreSQL Before Update Trigger der Datentabelle Die ursprüngliche Funktionalität musste dabei in eine externe Funktion ausgelagert werden: CREATE OR REPLACE FUNCTION Datentabelle RETURNS trigger AS $BODY$ DECLARE anz integer; BEGIN SELECT INTO anz count(d."Daten_ID") FROM Nutzer n, Daten_Nutzer d WHERE d.Daten_ID=old.id AND d.Nutzer_ID=n.ID AND n.DBAnmeldename= (SELECT CURRENT_USER); IF tg_op = 'UPDATE' THEN IF old. id new.id THEN RAISE EXCEPTION 'Id darf nicht verändert werden ID % ',old.id; END IF; IF anz = 0 THEN RAISE EXCEPTION 'KEINE RECHTE'; END IF; END IF; RETURN NEW; END;$BODY$ LANGUAGE plpgsql VOLATILE Abbildung 20: PostgreSQL Triggerfunktion der Datentabelle Die Realisierung der Befehle Insert, Update und Delete auf dem zentralen View wurden durch Rules implementiert. Diese sind im Folgenden abgebildet: 52

Anhang<br />

Der Trigger zur Prüfung <strong>der</strong> Schreibrechte wurde wie folgt umgesetzt:<br />

CREATE TRIGGER TRI_Datentabelle_BEFU<br />

BEFORE UPDATE<br />

ON Datentabelle<br />

FOR EACH ROW<br />

EXECUTE PROCEDURE function_tri_Datentabelle();<br />

Abbildung 19: PostgreSQL Before Update Trigger <strong>der</strong> Datentabelle<br />

Die ursprüngliche Funktionalität musste da<strong>bei</strong> in eine externe Funktion ausgelagert<br />

werden:<br />

CREATE OR REPLACE FUNCTION Datentabelle RETURNS trigger AS<br />

$BODY$<br />

DECLARE<br />

anz integer;<br />

BEGIN<br />

SELECT INTO anz count(d."Daten_ID")<br />

FROM Nutzer n, Daten_Nutzer d<br />

WHERE d.Daten_ID=old.id AND d.Nutzer_ID=n.ID AND n.DBAnmeldename=<br />

(SELECT CURRENT_USER);<br />

IF tg_op = 'UPDATE' THEN<br />

IF old. id new.id THEN<br />

RAISE EXCEPTION 'Id darf nicht verän<strong>der</strong>t werden ID % ',old.id;<br />

END IF;<br />

IF anz = 0 THEN<br />

RAISE EXCEPTION 'KEINE RECHTE';<br />

END IF;<br />

END IF;<br />

RETURN NEW;<br />

END;$BODY$<br />

LANGUAGE plpgsql VOLATILE<br />

Abbildung 20: PostgreSQL Triggerfunktion <strong>der</strong> Datentabelle<br />

Die Realisierung <strong>der</strong> Befehle Insert, Update <strong>und</strong> Delete auf dem zentralen View wurden<br />

durch Rules implementiert. Diese sind im Folgenden abgebildet:<br />

52

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!