From 0410c954474f9e8a586654f7d484f7779da0af89 Mon Sep 17 00:00:00 2001 From: Paolo Date: Mon, 1 Jun 2026 12:13:44 +0200 Subject: [PATCH 1/3] cis/private/lehre/notenliste.xls.php now checks if the lector belongs to the teaching unit --- cis/private/lehre/notenliste.xls.php | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/cis/private/lehre/notenliste.xls.php b/cis/private/lehre/notenliste.xls.php index 25f353c12..170d35bba 100644 --- a/cis/private/lehre/notenliste.xls.php +++ b/cis/private/lehre/notenliste.xls.php @@ -44,7 +44,7 @@ $uid = get_uid(); $sprache = getSprache(); $p = new phrasen($sprache); -if(!check_lektor($uid)) +if (!check_lektor($uid)) die('Sie haben keine Berechtigung fuer diese Seite'); if (!$db = new basis_db()) @@ -90,6 +90,20 @@ if(isset($_GET['lehreinheit_id'])) else $lehreinheit_id = ''; +// Checks if the logged lector belongs to this teaching unit +$qry = "SELECT DISTINCT 1 + FROM campus.vw_lehreinheit vwl + WHERE lehrveranstaltung_id = ".$db->db_add_param($lvid, FHC_INTEGER)." + AND studiensemester_kurzbz = ".$db->db_add_param($stsem)." + AND vwl.mitarbeiter_uid = ".$db->db_add_param($uid); +if ($lehreinheit_id != '') + $qry .= " AND lehreinheit_id=".$db->db_add_param($lehreinheit_id, FHC_INTEGER); + +if (!$result = $db->db_query($qry)) + die($p->t('tools/fehlerBeimAuslesenDerNoten')); +if (!$db->db_fetch_object($result)) + die('Sie haben keine Berechtigung fuer diese Seite'); + /* * Create Excel File */ From 4162305ac6ea83c56fa3397db7cd410f5b49be16 Mon Sep 17 00:00:00 2001 From: Paolo Date: Mon, 29 Jun 2026 13:28:57 +0200 Subject: [PATCH 2/3] Improved the permissions check in the cis/private/lehre/notenliste.xls.php --- cis/private/lehre/notenliste.xls.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/cis/private/lehre/notenliste.xls.php b/cis/private/lehre/notenliste.xls.php index 170d35bba..52b18b056 100644 --- a/cis/private/lehre/notenliste.xls.php +++ b/cis/private/lehre/notenliste.xls.php @@ -36,6 +36,7 @@ require_once('../../../include/notenschluessel.class.php'); require_once('../../../include/Excel/excel.php'); require_once('../../../include/phrasen.class.php'); require_once('../../../include/pruefung.class.php'); +require_once('../../../include/benutzerberechtigung.class.php'); $uid = get_uid(); @@ -90,18 +91,19 @@ if(isset($_GET['lehreinheit_id'])) else $lehreinheit_id = ''; -// Checks if the logged lector belongs to this teaching unit -$qry = "SELECT DISTINCT 1 - FROM campus.vw_lehreinheit vwl - WHERE lehrveranstaltung_id = ".$db->db_add_param($lvid, FHC_INTEGER)." - AND studiensemester_kurzbz = ".$db->db_add_param($stsem)." - AND vwl.mitarbeiter_uid = ".$db->db_add_param($uid); -if ($lehreinheit_id != '') - $qry .= " AND lehreinheit_id=".$db->db_add_param($lehreinheit_id, FHC_INTEGER); +// Permissions +$berechtigung = new benutzerberechtigung(); +$berechtigung->getBerechtigungen($uid); -if (!$result = $db->db_query($qry)) - die($p->t('tools/fehlerBeimAuslesenDerNoten')); -if (!$db->db_fetch_object($result)) +// LV load +$lvobj = new lehrveranstaltung($lvid); + +// Check permissions +if (!$berechtigung->isBerechtigt('admin') + && !$berechtigung->isBerechtigt('assistenz') + && !$berechtigung->isBerechtigt('lehre', $lvobj->oe_kurzbz, 's') + && !check_lektor_lehrveranstaltung($uid, $lvid, $stsem) +) die('Sie haben keine Berechtigung fuer diese Seite'); /* @@ -157,8 +159,6 @@ if (!$db->db_fetch_object($result)) // let's merge $format_title->setAlign('merge'); - $lvobj = new lehrveranstaltung($lvid); - $worksheet->write(0,0,$p->t('anwesenheitsliste/notenliste')." ".($sprache=='English'?$lvobj->bezeichnung_english:$lvobj->bezeichnung),$format_bold); $stg_obj = new studiengang($stg); From f5cdb0a2fbe581e0e395e20a5c387bf3bd881876 Mon Sep 17 00:00:00 2001 From: Harald Bamberger Date: Wed, 1 Jul 2026 12:10:06 +0200 Subject: [PATCH 3/3] add configs to define grace period and roles, add logic to benutzerberechtigungs class --- config/global.config-default.inc.php | 4 +++ include/benutzerberechtigung.class.php | 37 +++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/config/global.config-default.inc.php b/config/global.config-default.inc.php index 943363f6d..7351b865b 100644 --- a/config/global.config-default.inc.php +++ b/config/global.config-default.inc.php @@ -373,4 +373,8 @@ define('TESTTOOL_EXTERNE_UEBERWACHUNG_ALLOWED', false); //enable tags in StudVW define('STV_TAGS_ENABLED', false); + +//student accounts grace period +define('STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_PERIOD', '0 days'); +define('STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_ROLES', serialize(array('NO_DEFINED_ROLE'))); ?> diff --git a/include/benutzerberechtigung.class.php b/include/benutzerberechtigung.class.php index 69d4947bf..4685f4bbb 100644 --- a/include/benutzerberechtigung.class.php +++ b/include/benutzerberechtigung.class.php @@ -340,6 +340,40 @@ class benutzerberechtigung extends basis_db return true; } + protected function hasPreStudentStatusInGracePeriod($uid) + { + $period = defined('STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_PERIOD') + ? STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_PERIOD + : '0 days'; + $mapfunc = function($val) { + return $this->db_add_param($val); + }; + $roles = defined('STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_ROLES') + ? implode(', ', array_map($mapfunc, unserialize(STUDENTS_KEEP_PERMISSIONS_AFTER_USER_INACTIVE_ROLES))) + : 'NO_DEFINED_ROLE'; + + $sql = <<db_add_param($uid)} + AND + vs.aktiv = false + AND + public.get_rolle_prestudent(vs.prestudent_id, null) IN ({$roles}) + AND + (vs.updateaktivam + INTERVAL {$this->db_add_param($period)})::date >= CURRENT_DATE +EOSQL; + $result = $this->db_query($sql); + if($result && $this->db_num_rows($result) > 0) + { + return true; + } + return false; + } + /** * Laedt die Berechtigungen eines Users * @param $uid @@ -355,7 +389,8 @@ class benutzerberechtigung extends basis_db if($row = $this->db_fetch_object($result)) { // Wenn die Person nicht aktiv ist dann hat diese auch keine Rechte - if($this->db_parse_bool($row->aktiv) == false) + if($this->db_parse_bool($row->aktiv) == false + && $this->hasPreStudentStatusInGracePeriod($uid) === false) return false; } else