diff --git a/system/checksystem.php b/system/checksystem.php
index 5dc1fd564..347d50df4 100644
--- a/system/checksystem.php
+++ b/system/checksystem.php
@@ -3621,6 +3621,141 @@ if(!@$db->db_query("SELECT bezeichnung FROM public.tbl_aufmerksamdurch LIMIT 1")
echo '
Mehrsprachige Bezeichnung für Aufmerksamdurch hinzugefügt';
}
+// View fuer Berechtigungen
+if($result = @$db->db_query("SELECT * FROM information_schema.tables WHERE table_schema='system' AND table_name='vw_berechtigung'"))
+{
+ if($db->db_num_rows($result)==0)
+ {
+ $qry = "
+ CREATE OR REPLACE VIEW system.vw_berechtigung_nichtrekursiv AS
+ SELECT
+ uid, berechtigung_kurzbz,
+ -- art zusammenfassung und nur die nehmen die gleich sind
+ CASE WHEN length(art)>length(art1) THEN art1 ELSE art END as art,
+ oe_kurzbz, kostenstelle_id
+ FROM
+ (
+ -- Normal
+ SELECT
+ benutzerberechtigung_id, tbl_benutzerrolle.uid, tbl_benutzerrolle.funktion_kurzbz,
+ tbl_benutzerrolle.rolle_kurzbz, tbl_benutzerrolle.berechtigung_kurzbz, tbl_benutzerrolle.art, tbl_benutzerrolle.art art1,
+ tbl_benutzerrolle.oe_kurzbz, tbl_benutzerrolle.studiensemester_kurzbz, tbl_benutzerrolle.start,
+ tbl_benutzerrolle.ende, tbl_benutzerrolle.negativ, tbl_benutzerrolle.updateamum, tbl_benutzerrolle.updatevon,
+ tbl_benutzerrolle.insertamum, tbl_benutzerrolle.insertvon,tbl_benutzerrolle.kostenstelle_id,tbl_benutzerrolle.anmerkung
+ FROM
+ system.tbl_benutzerrolle JOIN system.tbl_berechtigung USING(berechtigung_kurzbz)
+
+ -- Rollen
+ UNION
+ SELECT
+ benutzerberechtigung_id, tbl_benutzerrolle.uid, tbl_benutzerrolle.funktion_kurzbz,
+ tbl_benutzerrolle.rolle_kurzbz, tbl_berechtigung.berechtigung_kurzbz, tbl_benutzerrolle.art, tbl_rolleberechtigung.art art1,
+ tbl_benutzerrolle.oe_kurzbz, tbl_benutzerrolle.studiensemester_kurzbz, tbl_benutzerrolle.start,
+ tbl_benutzerrolle.ende, tbl_benutzerrolle.negativ, tbl_benutzerrolle.updateamum, tbl_benutzerrolle.updatevon,
+ tbl_benutzerrolle.insertamum, tbl_benutzerrolle.insertvon,tbl_benutzerrolle.kostenstelle_id,tbl_benutzerrolle.anmerkung
+ FROM
+ system.tbl_benutzerrolle JOIN system.tbl_rolle USING(rolle_kurzbz)
+ JOIN system.tbl_rolleberechtigung USING(rolle_kurzbz)
+ JOIN system.tbl_berechtigung ON(tbl_rolleberechtigung.berechtigung_kurzbz=tbl_berechtigung.berechtigung_kurzbz)
+
+ -- Funktionen
+ UNION
+ SELECT
+ benutzerberechtigung_id, tbl_benutzerfunktion.uid, tbl_benutzerrolle.funktion_kurzbz,
+ tbl_benutzerrolle.rolle_kurzbz, tbl_benutzerrolle.berechtigung_kurzbz, tbl_benutzerrolle.art, tbl_benutzerrolle.art art1,
+ tbl_benutzerfunktion.oe_kurzbz, tbl_benutzerrolle.studiensemester_kurzbz, tbl_benutzerrolle.start,
+ tbl_benutzerrolle.ende, tbl_benutzerrolle.negativ, tbl_benutzerrolle.updateamum, tbl_benutzerrolle.updatevon,
+ tbl_benutzerrolle.insertamum, tbl_benutzerrolle.insertvon,tbl_benutzerrolle.kostenstelle_id,tbl_benutzerrolle.anmerkung
+ FROM
+ system.tbl_benutzerrolle JOIN public.tbl_benutzerfunktion USING(funktion_kurzbz)
+ WHERE
+ (tbl_benutzerfunktion.datum_von IS NULL OR tbl_benutzerfunktion.datum_von<=now())
+ AND (tbl_benutzerfunktion.datum_bis IS NULL OR tbl_benutzerfunktion.datum_bis>=now())
+
+ -- Funktion Mitarbeiter
+ UNION
+ SELECT
+ benutzerberechtigung_id, vw_mitarbeiter.uid, tbl_benutzerrolle.funktion_kurzbz,
+ tbl_benutzerrolle.rolle_kurzbz, tbl_benutzerrolle.berechtigung_kurzbz, tbl_benutzerrolle.art, tbl_benutzerrolle.art art1,
+ tbl_benutzerrolle.oe_kurzbz, tbl_benutzerrolle.studiensemester_kurzbz, tbl_benutzerrolle.start,
+ tbl_benutzerrolle.ende, tbl_benutzerrolle.negativ, tbl_benutzerrolle.updateamum, tbl_benutzerrolle.updatevon,
+ tbl_benutzerrolle.insertamum, tbl_benutzerrolle.insertvon,tbl_benutzerrolle.kostenstelle_id,tbl_benutzerrolle.anmerkung
+ FROM
+ system.tbl_benutzerrolle, campus.vw_mitarbeiter
+ WHERE
+ tbl_benutzerrolle.funktion_kurzbz='Mitarbeiter' and vw_mitarbeiter.aktiv
+
+
+ -- Funktion Student
+ UNION
+ SELECT
+ benutzerberechtigung_id, vw_student.uid, tbl_benutzerrolle.funktion_kurzbz,
+ tbl_benutzerrolle.rolle_kurzbz, tbl_benutzerrolle.berechtigung_kurzbz, tbl_benutzerrolle.art, tbl_benutzerrolle.art art1,
+ tbl_benutzerrolle.oe_kurzbz, tbl_benutzerrolle.studiensemester_kurzbz, tbl_benutzerrolle.start,
+ tbl_benutzerrolle.ende, tbl_benutzerrolle.negativ, tbl_benutzerrolle.updateamum, tbl_benutzerrolle.updatevon,
+ tbl_benutzerrolle.insertamum, tbl_benutzerrolle.insertvon,tbl_benutzerrolle.kostenstelle_id,tbl_benutzerrolle.anmerkung
+ FROM
+ system.tbl_benutzerrolle, campus.vw_student
+ WHERE
+ tbl_benutzerrolle.funktion_kurzbz='Student' and vw_student.aktiv
+ ) as a
+ WHERE
+ -- Datumsgrenzen beruecksichtigen
+ (a.start<=now() OR a.start is null)
+ AND (a.ende>=now() OR a.ende is null)
+
+ -- Neagtiv Rechte entfernen
+ AND not negativ
+ AND NOT EXISTS(SELECT
+ 1
+ FROM
+ system.tbl_benutzerrolle JOIN system.tbl_berechtigung USING(berechtigung_kurzbz) WHERE uid=a.uid AND berechtigung_kurzbz=a.berechtigung_kurzbz AND negativ);
+
+
+
+ CREATE OR REPLACE VIEW system.vw_berechtigung AS
+ WITH RECURSIVE oes(oe_kurzbz, pfad) as
+ (
+ SELECT
+ oe_kurzbz, '/' || oe_kurzbz::text as pfad FROM public.tbl_organisationseinheit
+ WHERE
+ oe_parent_kurzbz is null AND aktiv = true
+ UNION ALL
+ SELECT
+ o.oe_kurzbz, COALESCE(oes.pfad,'') || '/' || COALESCE(o.oe_kurzbz,'') as pfad
+ FROM
+ public.tbl_organisationseinheit o, oes
+ WHERE
+ o.oe_parent_kurzbz=oes.oe_kurzbz and aktiv = true
+ )
+ SELECT
+ uid, berechtigung_kurzbz, art, oes.oe_kurzbz, kostenstelle_id
+ FROM
+ system.vw_berechtigung_nichtrekursiv, oes
+ WHERE
+ (oes.pfad || '/' like '%/' || vw_berechtigung_nichtrekursiv.oe_kurzbz || '/%'
+ OR (vw_berechtigung_nichtrekursiv.oe_kurzbz is null AND kostenstelle_id is null))
+ UNION
+ SELECT
+ uid, berechtigung_kurzbz, art, null::varchar(32), kostenstelle_id
+ FROM
+ system.vw_berechtigung_nichtrekursiv
+ WHERE
+ kostenstelle_id is not null;
+
+ GRANT SELECT ON system.vw_berechtigung_nichtrekursiv TO web;
+ GRANT SELECT ON system.vw_berechtigung_nichtrekursiv TO vilesci;
+ GRANT SELECT ON system.vw_berechtigung TO web;
+ GRANT SELECT ON system.vw_berechtigung TO vilesci;
+ ";
+
+ if(!$db->db_query($qry))
+ echo 'system.vw_berechtigung:'.$db->db_last_error().'
';
+ else
+ echo '
Neue View (system.vw_berechtigung) hinzugefügt';
+ }
+}
+
echo '
';