Da ich Felder im Formular abhängig von der Berechtigung editierbar mache, aber das Speichern im Backend nicht für jede Berechtigungsstufe individuell speichern möchte,
Dreh es einfach rum. Speichere die Berechtigungen im Backend. Und wenn Du das Formular zusammenbaust frage eben das selbe Backend nach eben diesen Berechtigungen. Nehmen wir mal ein einfaches Backend mit einer ACL:
<?php
class accesControl {
private $rights;
function __construct() {
$this -> rights = $this -> readRights();
}
function hasRight ( $rightname=false, $right='read' ) {
$rights = $this -> rights[ $rightname ];
if ( isset( $rights['user'][$_SESSION['username']][$right] ) && $rights['user'][$_SESSION['username']][$right] ) {
return true;
} else {
foreach ($_SESSION['groups'] as $group ) {
if ( isset( $rights['group'][$group][$right] ) && $rights['group'][$group][$right] ) {
return true;
}
}
}
return false;
}
function readRights() {
$right['isDenied']['group']['deniedUsers']['read'] = true;
$right['usermin']['user']['admin_1']['read'] = true;
$right['usermin']['group']['admins']['read'] = true;
$right['usermin']['user']['admin_1']['write'] = true;
$right['usermin']['group']['admins']['write'] = true;
$right['logon']['group']['allusers']['read'] = true;
$right['logon']['group']['logon']['read'] = true;
$right['data']['group']['allusers']['read'] = true;
$right['data']['group']['workers']['read'] = true;
$right['data']['group']['workers']['write'] = true;
return $right;
}
}
$acl = new accesControl();
session_start();
$_SESSION['username'] = 'admin_1';
$_SESSION['groups'] = ['logon', 'usermin'];
checkRights( $acl );
$_SESSION['username'] = 'chef';
$_SESSION['groups'] = ['allusers','usermin', 'workers' ];
checkRights( $acl );
$_SESSION['username'] = 'Leser';
$_SESSION['groups'] = ['allusers'];
checkRights( $acl );
$_SESSION['username'] = 'Jobber';
$_SESSION['groups'] = ['allusers', 'workers'];
checkRights( $acl );
$_SESSION['username'] = 'Denni';
$_SESSION['groups'] = ['allusers', 'workers', 'deniedUsers' ];
checkRights( $acl );
function checkRights( $acl ) {
if ( $acl -> hasRight( 'usermin' ) && false === $acl -> hasRight( 'isDenied') ) {
echo $_SESSION['username'] . " darf Benutzer ansehen" . PHP_EOL;
}
if ( $acl -> hasRight( 'usermin', 'write' ) && false === $acl -> hasRight( 'isDenied') ) {
echo $_SESSION['username'] . " darf Benutzer verwalten" . PHP_EOL;
}
if ( $acl -> hasRight( 'logon' ) && false === $acl -> hasRight( 'isDenied') ) {
echo $_SESSION['username'] . " darf sich anmelden" . PHP_EOL;
}
if ( $acl -> hasRight( 'data' ) && false === $acl -> hasRight( 'isDenied') ) {
echo $_SESSION['username'] . " darf Daten ansehen" . PHP_EOL;
}
if ( $acl -> hasRight( 'data', 'write' ) && false === $acl -> hasRight( 'isDenied') ) {
echo $_SESSION['username'] . " darf Daten schreiben" . PHP_EOL;
}
if ( $acl -> hasRight( 'isDenied') ) {
echo $_SESSION['username'] . " ist angemeldet aber blockiert" . PHP_EOL;
}
}
Wo ist das Problem, beim Erzeugen des Formulars etwas wie
session_start();
require_once './lib/accesControl.class.php';
$acl = new accesControl();
if ( false === $acl -> hasRight( 'isDenied' ) ) {
?>
<h1>Ihr Account wurde gesperrt.</h1>
<p>Wenden Sie sich an den Chef.</p>
<?php
exit;
}
if (
$acl -> hasRight( 'data', 'write' )
&& $acl -> hasRight( 'data', 'read' )
) {
?>
<label for="p_serial">Seriennummer:</label>
<input type="text" value="1234" name="p_serial" id="p_serial">
<?php
} elseif ( $acl -> hasRight( 'data', 'read' ) ) {
?>
<label for="p_serial">Seriennummer:</label>
<input type="text" disabled value="1234" name="p_serial" id="p_serial">
<?php
}
zu notieren und vor dem Eintrag in die Datenbank genau das selbe zu machen?