Rechte Bugfix studienordnung

This commit is contained in:
Stefan Puraner
2015-11-03 08:07:38 +01:00
parent e8dd844856
commit 73e49be88c
13 changed files with 338 additions and 46 deletions
+171 -1
View File
@@ -3587,6 +3587,176 @@ if(!$result = @$db->db_query("SELECT code FROM public.tbl_standort LIMIT 1"))
echo '<br>Standort: Spalte code hinzugefügt';
}
// Bezeichnung der ZGV auf 128 Zeichen verlaengert
if($result = @$db->db_query("SELECT * FROM pg_class, pg_attribute WHERE pg_class.relkind = 'r' AND pg_attribute.attrelid = pg_class.oid and pg_class.relname = 'tbl_zgv' and pg_attribute.attname = 'bezeichnung' and pg_attribute.atttypmod=64+4;"))
{
if($db->db_num_rows($result)==1)
{
$qry = "ALTER TABLE bis.tbl_zgv ALTER COLUMN bezeichnung TYPE varchar(128)[];
ALTER TABLE bis.tbl_zgvmaster ALTER COLUMN bezeichnung TYPE varchar(128)[];
ALTER TABLE bis.tbl_zgvdoktor ALTER COLUMN bezeichnung TYPE varchar(128)[];
";
if(!$db->db_query($qry))
echo '<strong>ZGV Bezeichnung verlaengert: '.$db->db_last_error().'</strong><br>';
else
echo '<br>ZGV: Spalte bezeichnung verlaengert';
}
}
// Mehrsprachigkeit fuer Aufmerksamdurch
if(!@$db->db_query("SELECT bezeichnung FROM public.tbl_aufmerksamdurch LIMIT 1"))
{
$qry = "
ALTER TABLE public.tbl_aufmerksamdurch ADD COLUMN bezeichnung varchar(128)[];
ALTER TABLE public.tbl_aufmerksamdurch ADD COLUMN aktiv boolean NOT NULL DEFAULT true;
UPDATE public.tbl_aufmerksamdurch SET bezeichnung[1]=beschreibung;
UPDATE public.tbl_aufmerksamdurch SET bezeichnung[2]=beschreibung;
";
if(!$db->db_query($qry))
echo '<strong>public.tbl_aufmerksamdurch '.$db->db_last_error().'</strong><br>';
else
echo '<br>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 '<strong>system.vw_berechtigung:'.$db->db_last_error().'</strong><br>';
else
echo '<br>Neue View (system.vw_berechtigung) hinzugefügt';
}
}
echo '<br><br><br>';
$tabellen=array(
@@ -3732,7 +3902,7 @@ $tabellen=array(
"public.tbl_akte" => array("akte_id","person_id","dokument_kurzbz","uid","inhalt","mimetype","erstelltam","gedruckt","titel","bezeichnung","updateamum","updatevon","insertamum","insertvon","ext_id","dms_id","nachgereicht","anmerkung","titel_intern","anmerkung_intern"),
"public.tbl_ampel" => array("ampel_id","kurzbz","beschreibung","benutzer_select","deadline","vorlaufzeit","verfallszeit","insertamum","insertvon","updateamum","updatevon","email"),
"public.tbl_ampel_benutzer_bestaetigt" => array("ampel_benutzer_bestaetigt_id","ampel_id","uid","insertamum","insertvon"),
"public.tbl_aufmerksamdurch" => array("aufmerksamdurch_kurzbz","beschreibung","ext_id"),
"public.tbl_aufmerksamdurch" => array("aufmerksamdurch_kurzbz","beschreibung","ext_id","bezeichnung", "aktiv"),
"public.tbl_aufnahmeschluessel" => array("aufnahmeschluessel"),
"public.tbl_aufnahmetermin" => array("aufnahmetermin_id","aufnahmetermintyp_kurzbz","prestudent_id","termin","teilgenommen","bewertung","protokoll","insertamum","insertvon","updateamum","updatevon","ext_id"),
"public.tbl_aufnahmetermintyp" => array("aufnahmetermintyp_kurzbz","bezeichnung"),