| 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
 
 
 
 
 |