On Sat, 23 Aug 2003 13:31:01 +0200, Jimmy wrote:
> Personen der redigerer skal kunne *se* alle data, men kun rette i dem, han
> har adgangsniveau til.
Jeg havde næsten samme problemstilling og fandt følgende løsning.
Jeg lavede et array som indeholder alle informationer til at kunne lave
formularen:
Fx:
$mega = array();
$meta[] = array
(
'type' = 'string',
'name' = 'username',
'filter' = SF_ADMIN | SF_SUPERADMIN
...
);
$meta[] = array
(
'type' = 'string',
'name' = 'password',
'filter' = SF_SUPERADMIN
...
);
Jeg har så flere informationer så som, valideringsregler, fejlmeddelelser,
hjælpe-tekst m.fl.
Jeg har så en funktion (faktisk en klasse) der laver formularen. Den
kaldes ved:
LavMinFormular(&$meta,SF_ADMIN); // vil kunne redigere: username
LavMinFormular(&$meta,SF_SUPERADMIN); // Vil kunne redigere: username,
password
Pseudokoden for LavMinFormular() er:
function($meta,$filter)
{
foreach($meta as $field)
{
if( $field['filter'] & $filter )
// lav felt til redigering
else
// vis-værdien
}
}
Når en bruger så logger ind, skal du bare vide hvilken adgangs-gruppe han
har, fx SF_ADMIN, som du kan gemme i din session-data, og så kan du blot
skrive: LavMinFormular(&$meta,$_SESSION['adgangsgruppe']);
Adgangsgrupper skal være et tal der består af én bit; fx
SF_ADMIN = 1 (binært: 0001)
SF_SUPERADMIN = 2 (binært: 0010)
SF_NA1 = 4 (binært: 0100)
SF_NA2 = 8 (binært: 1000)
Grunden til dette er at vi gerne vil kunne gøre følgende:
'filter' = SF_ADMIN | SF_SUPERADMIN (SF_ADMIN | SF_SUPERADMIN = (binært) 0011 ..
Hvis nu SF_NA1 var 3 (binært 0011), så vil vi ikke kunne se om filter var
SF_NA1 eller SF_ADMIN | SF_SUPERADMIN.
Jeg kan se at min forklaring ikke er ret god, men jeg håber du forstår
ideen. Ellers må du spørge.
--
Dennis Møllegaard Pedersen
|