Added/Extended PERMISSION-checks to Lehrauftraege

Added permission-checks to
. navigation
. controller methods
. tabulator data query
. cancel contract
This commit is contained in:
Cris
2019-10-28 16:23:31 +01:00
committed by hainberg
parent 7cf812deae
commit 720f117312
10 changed files with 124 additions and 37 deletions
+6 -1
View File
@@ -56,7 +56,10 @@ $config['navigation_header'] = array(
'description' => 'Lehrauftrag',
'expand' => true,
'sort' => 40,
'requiredPermissions' => 'lehre:r'
'requiredPermissions' => array(
'lehre/lehrauftrag_bestellen:r',
'lehre/lehrauftrag_erteilen:r'
)
)
)
),
@@ -132,6 +135,7 @@ $config['navigation_menu']['lehre/lehrauftrag/Lehrauftrag/index'] = array(
'description' => 'Lehrauftrag bestellen',
'icon' => '',
'sort' => 1,
'requiredPermissions' => 'lehre/lehrauftrag_bestellen:r',
'target' => '_blank'
),
'lehrauftragErteilen' => array(
@@ -139,6 +143,7 @@ $config['navigation_menu']['lehre/lehrauftrag/Lehrauftrag/index'] = array(
'description' => 'Lehrauftrag erteilen',
'icon' => '',
'sort' => 1,
'requiredPermissions' => 'lehre/lehrauftrag_erteilen:r',
'target' => '_blank'
)
);
@@ -74,6 +74,15 @@ class Lehrauftrag extends Auth_Controller
show_error('Fehler bei Berechtigungsprüfung');
}
// If studiengang_kz get param was set, check against entitled stg
if (!is_null($studiengang_kz))
{
if (!in_array($studiengang_kz, $studiengang_kz_arr))
{
show_error('Keine Berechtigung für diesen Studiengang');
}
}
// Set studiensemester selected for studiengang dropdown
$studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester
if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value
@@ -123,6 +132,12 @@ class Lehrauftrag extends Auth_Controller
$betrag = (isset($lehrauftrag->betrag)) ? $lehrauftrag->betrag : null;
$vertrag_betrag = (isset($lehrauftrag->vertrag_betrag)) ? $lehrauftrag->vertrag_betrag : null;
$studiensemester_kurzbz = (isset($lehrauftrag->studiensemester_kurzbz)) ? $lehrauftrag->studiensemester_kurzbz : null;
$studiengang_kz = (isset($lehrauftrag->studiengang_kz)) ? $lehrauftrag->studiengang_kz : null;
// Check if user is entitled to order this Lehrauftrag
if (!$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_LEHRAUFTRAG_BESTELLEN, 'suid', $studiengang_kz)){
show_error('Keine Bestellberechtigung für diesen Studiengang: '. $studiengang_kz);
}
// update contract if contract exists and the betrag was changed
$hasChanged = (floatval($betrag) != floatval($vertrag_betrag)) ? true : false;
@@ -32,6 +32,7 @@ class LehrauftragAkzeptieren extends Auth_Controller
$this->load->model('accounting/Vertrag_model', 'VertragModel');
$this->load->model('ressource/Mitarbeiter_model', 'MitarbeiterModel');
$this->load->model('codex/Bisverwendung_model', 'BisverwendungModel');
$this->load->model('person/Benutzer_model', 'BenutzerModel');
// Load libraries
$this->load->library('WidgetLib');
@@ -122,15 +123,42 @@ class LehrauftragAkzeptieren extends Auth_Controller
// Loop through lehraufträge
$lehrauftrag_arr = $this->input->post('selected_data');
if(is_array($lehrauftrag_arr))
{
foreach($lehrauftrag_arr as $lehrauftrag)
{
$mitarbeiter_uid = (!is_null($lehrauftrag['mitarbeiter_uid'])) ? $lehrauftrag['mitarbeiter_uid'] : null;
$vertrag_id = (!is_null($lehrauftrag['vertrag_id'])) ? $lehrauftrag['vertrag_id'] : null;
// Check if user is entitled to accept this Lehrauftrag
// * first retrieve person_id of the contract
$this->VertragModel->addSelect('person_id');
if ($result = getData($this->VertragModel->load($vertrag_id)))
{
// * then find the uid of that contracts person_id
$this->BenutzerModel->addSelect('uid');
if ($result = getData($this->BenutzerModel->getFromPersonId($result[0]->person_id)))
{
// * finally check uid of contract against the logged in user
if ($result[0]->uid != $this->_uid)
{
show_error('Keine Berechtigung für diesen Vertrag');
}
}
else
{
show_error($result->retval);
}
}
else
{
show_error($result->retval);
}
// Set status to accepted
$result = $this->VertragModel->setStatus($vertrag_id, $mitarbeiter_uid, 'akzeptiert');
$result = $this->VertragModel->setStatus($vertrag_id, $this->_uid, 'akzeptiert');
if ($result->retval)
{
@@ -75,6 +75,15 @@ class LehrauftragErteilen extends Auth_Controller
show_error('Fehler bei Berechtigungsprüfung');
}
// If oe_kurzbz get param was set, check against entitled stg
if (!is_null($oe_kurzbz))
{
if (!in_array($oe_kurzbz, $oe_kurzbz_arr))
{
show_error('Keine Berechtigung für diese Organisationseinheit');
}
}
// Set studiensemester selected for studiengang dropdown
$studiensemester_kurzbz = $this->input->get('studiensemester'); // if provided by selected studiensemester
if (is_null($studiensemester_kurzbz)) // else set next studiensemester as default value
@@ -118,6 +127,12 @@ class LehrauftragErteilen extends Auth_Controller
{
$mitarbeiter_uid = (isset($lehrauftrag->mitarbeiter_uid)) ? $lehrauftrag->mitarbeiter_uid : null;
$vertrag_id = (isset($lehrauftrag->vertrag_id)) ? $lehrauftrag->vertrag_id : null;
$lv_oe_kurzbz = (isset($lehrauftrag->lv_oe_kurzbz)) ? $lehrauftrag->lv_oe_kurzbz : null;
// Check if user is entitled to approve this Lehrauftrag
if (!$this->permissionlib->isBerechtigt(self::BERECHTIGUNG_LEHRAUFTRAG_ERTEILEN, 'suid', $lv_oe_kurzbz)){
show_error('Keine Erteilberechtigung für diese Organisationseinheit: '. $lv_oe_kurzbz);
}
$result = $this->VertragModel->setStatus($vertrag_id, $mitarbeiter_uid, 'erteilt');
@@ -528,7 +528,6 @@ $this->load->view(
// reduce to necessary fields
return {
'row_index' : data.row_index,
'mitarbeiter_uid' : data.mitarbeiter_uid,
'vertrag_id' : data.vertrag_id
}
});
@@ -281,7 +281,7 @@ $filterWidgetArray = array(
'app' => LehrauftragAkzeptieren::APP,
'datasetName' => 'lehrauftragAccept',
'filterKurzbz' => 'LehrauftragAccept',
'requiredPermissions' => 'lehre', // TODO: change permission
'requiredPermissions' => 'lehre/lehrauftrag_akzeptieren',
'datasetRepresentation' => 'tabulator',
'reloadDataset' => true, // reload query on page refresh
'customMenu' => false,
@@ -620,6 +620,7 @@ $(function() {
'row_index': data.row_index,
'mitarbeiter_uid' : data.mitarbeiter_uid,
'vertrag_id' : data.vertrag_id,
'lv_oe_kurzbz' : data.lv_oe_kurzbz
}
});
@@ -289,7 +289,7 @@ $filterWidgetArray = array(
'app' => LehrauftragErteilen::APP,
'datasetName' => 'lehrauftragApprove',
'filterKurzbz' => 'LehrauftragApprove',
'requiredPermissions' => 'lehre', // TODO: change permission
'requiredPermissions' => 'lehre/lehrauftrag_erteilen',
'datasetRepresentation' => 'tabulator',
'reloadDataset' => true, // reload query on page refresh
'customMenu' => false,
@@ -294,7 +294,7 @@ $filterWidgetArray = array(
'app' => Lehrauftrag::APP,
'datasetName' => 'lehrauftragOrder',
'filterKurzbz' => 'LehrauftragOrder',
'requiredPermissions' => 'lehre', // TODO: change permission
'requiredPermissions' => 'lehre/lehrauftrag_bestellen',
'datasetRepresentation' => 'tabulator',
'reloadDataset' => true, // reload query on page refresh
'customMenu' => false,
+54 -30
View File
@@ -32,6 +32,7 @@
// * - Lehreinheitmitarbeiter Zuteilung hinzufuegen/bearbeiten/loeschen
// * - Lehreinheitgruppe Zutelung hinzufuegen/loeschen
// * - Lehreinheit anlegen/bearbeiten/loeschen
// * - Lehrauftrag (Vertrag) loeschen (stornieren)
// ****************************************
require_once('../../config/vilesci.config.inc.php');
@@ -1754,43 +1755,66 @@ if(!$error)
}
elseif(isset($_POST['type']) && $_POST['type']=='cancelVertrag')
{
if(isset($_POST['vertrag_id']) && isset($_POST['mitarbeiter_uid']))
$error = false;
// Check if user is entitled to cancel this contract
if (isset($_POST['vertrag_id']) && is_numeric($_POST['vertrag_id']))
{
// * first find lehrveranstaltung_id of the contracts lehrveranstaltung
$vertrag = new vertrag();
if($vertrag->cancel($_POST['vertrag_id'], $_POST['mitarbeiter_uid']))
$vertrag->load($_POST['vertrag_id']);
$lva = new lehrveranstaltung($vertrag->lehrveranstaltung_id);
// * then check if the user has permissions to cancel the corresponding lv-organisational units
if (!$rechte->isBerechtigtMultipleOe('admin', $lva->getAllOe(), 'suid') &&
!$rechte->isBerechtigtMultipleOe('lehre/lehrauftrag_bestellen', $lva->getAllOe(), 'suid'))
{
$return = true;
}
else
{
$errormsg = 'Fehler beim Ausführen des Vertragsstornos';
$error = true;
$return = false;
$errormsg = 'Keine Berechtigung';
}
}
elseif(isset($_POST['vertrag_id']) && isset($_POST['person_id']))
{
$benutzer = new Benutzer();
if($benutzer->getBenutzerFromPerson($_POST['person_id']))
{
$mitarbeiter_uid = $benutzer->result[0]->uid;
$vertrag = new vertrag();
if($vertrag->cancel($_POST['vertrag_id'], $mitarbeiter_uid))
{
$return = true;
}
else
{
$errormsg = 'Fehler beim Ausführen des Vertragsstornos';
$return = false;
}
}
else
{
$errormsg = 'Benutzer konnte nicht von PersonID geladen werden';
$return = false;
}
}
if (!$error)
{
if(isset($_POST['mitarbeiter_uid']))
{
$vertrag = new vertrag();
if($vertrag->cancel($_POST['vertrag_id'], $_POST['mitarbeiter_uid']))
{
$return = true;
}
else
{
$errormsg = 'Fehler beim Ausführen des Vertragsstornos';
$return = false;
}
}
elseif(isset($_POST['person_id']))
{
$benutzer = new Benutzer();
if($benutzer->getBenutzerFromPerson($_POST['person_id']))
{
$mitarbeiter_uid = $benutzer->result[0]->uid;
$vertrag = new vertrag();
if($vertrag->cancel($_POST['vertrag_id'], $mitarbeiter_uid))
{
$return = true;
}
else
{
$errormsg = 'Fehler beim Ausführen des Vertragsstornos';
$return = false;
}
}
else
{
$errormsg = 'Benutzer konnte nicht von PersonID geladen werden';
$return = false;
}
}
}
else
{
$errormsg = 'VertragsID und MitarbeiterUID müssen uebergeben werden';