Probleem met rechtensysteem

Praat mee over van alles en nog wat!
Forumregels
Dit forum is voor alle zinnige gesprekken buiten phpBB om. Discussies en gesprekken over interessante onderwerpen.

Een nieuw onderwerp moet..:
  • uiteraard voldoen aan de algemene voorwaarden
  • niet passen in de gewone supportfora
  • interessante zijn voor het overgrote deel van onze gebruikers
  • een neutrale of positieve ondertoon hebben
  • anders zijn dan bestaande onderwerpen
Plaats reactie
Gebruikersavatar
AarClay
Berichten: 776
Lid geworden op: 10 feb 2005, 17:12

Probleem met rechtensysteem

Bericht door AarClay » 07 mei 2005, 17:34

Code: Selecteer alles

CREATE TABLE `usergroups` ( 
  `rid` int(11) NOT NULL default '0', 
  `naam` varchar(25) NOT NULL default '', 
  `beschrijving` text NOT NULL, 
  `view_admin` enum('0','1') NOT NULL default '0', 
  `useradmin` enum('0','1') NOT NULL default '0', 
  `post_usernote` enum('0','1') NOT NULL default '0', 
  PRIMARY KEY  (`rid`,`rid`) 
) TYPE=MyISAM; 
met dit als scripting:

Code: Selecteer alles

<?php 
/* 
Door: Aar 
Naam: Rechtenchecker V1. 

Uitleg: 
Een script om rechten mee te checken en aan te maken. Het werkt net als Windows XP rechtensysteem; met usergroups dus. 
Een user zit gekoppeld aan een usergroup en in de usergroup staan de rechten. Hiermee wordt bepaald wat een user nou wel of niet mag. 
Per recht dient een veld aangemaakt te worden. Dit veld bestaat uit de naam van het recht (bijv. post_usernote) die het type ENUM heeft. 
De waardes ervan zijn 0 en 1 en standaard hoort hij op 0 te staan. 
Tevens om user werkelijk een usergroup toe te wijzen dient een veld aangemaakt te worden in de ledentabel die Recht heet. Deze 
wordt een INT veld. De standaard waarde kan je op 1 zetten. Dan dient wel tevens een usergroep met id-nr 1 te bestaan waarin de ledenrechten 
ingesteld staan. 
Het onderste script bestaat uit 3 delen: De querie die ingeklopt moet worden in phpMyAdmin (met enkele voorbeeld rechten), het checkscript 
die op elke pagina geincludeerd moet worden, en de recht-gever, die checkt of je dat recht mag gebruiken volgens de database. 
Die if ($_SESSION['logged_in']) kan je aanpassen naar de manier van "ingelogd-zijn"-check die jouw ledensysteem kent. 

ToDo: 
- Adminpanel bouwen 
- Betere MySQL foutenafhandeling. 
- Bestaand inlogsysteempje als voorbeeld gebruiken om dit systeem te demonstreren. 

Succes. 

Het script: 
/* 

CREATE TABLE `usergroups` ( 
  `rid` int(11) NOT NULL default '0', 
  `naam` varchar(25) NOT NULL default '', 
  `beschrijving` text NOT NULL, 
  `view_admin` enum('0','1') NOT NULL default '0', 
  `useradmin` enum('0','1') NOT NULL default '0', 
  `post_usernote` enum('0','1') NOT NULL default '0', 
  PRIMARY KEY  (`rid`,`rid`) 
) TYPE=MyISAM; 


*/ 





// kijken of je ingelogd bent, altijd handig.... 
if ($_SESSION['logged_in']) { 
// selecteer het leden-id nummer 
$select_lid = mysql_query("SELECT * FROM leden WHERE id = '$_SESSION[id]'") or die (mysql_error()); 
while($main_obj = mysql_fetch_object($select_lid)){ 

      // $main_obj->Recht zorgt dus dat het ID uit de ledentabel van het recht 
      // van jouw wordt opgehaald uit het veld Recht. 
      $rechtenid = $main_obj->Recht; 
      $select_rights = mysql_query("SELECT * FROM usergroups WHERE rid = '$rechtenid'") or die (mysql_error()); 
      $check_right = mysql_fetch_object($select_rights); 
} 
} // login check 
?> 

Met "$check_right->post_usernote" kan je dus bijv. een check doen of een user 
een usernote mag plaatsen. 
De source is dan: 
<?php 
if ($check_right->post_usernote) { 
        // Je mag een usernote plaatsen 
        } else { 
        // Geen usernote plaatsen 
        } 
        ?> 
Wekt perfect, maar dit gebruikt dus voor elk recht een querie heb ik gehoord, klopt dat?
Opzich erg leuk als je 20 rechten checkt in de Admin, wat je wel niet mag.

Hoe kan ik dit aanpassen zodat dit minder queries gebruikt.
Iets met JOINS denk ik aan ?

Gebruikersavatar
mosymuis
Berichten: 6940
Lid geworden op: 05 feb 2003, 14:00
Locatie: Amsterdam
Contacteer:

Re: Probleem met rechtensysteem

Bericht door mosymuis » 07 mei 2005, 19:47

AarClay schreef:Wekt perfect, maar dit gebruikt dus voor elk recht een querie heb ik gehoord, klopt dat?
Nee, het haalt alle rechten in één rij op. Als het goed gebruikt wordt, gebruikt het dus maximaal twee database queries.

Gebruikersavatar
AarClay
Berichten: 776
Lid geworden op: 10 feb 2005, 17:12

Re: Probleem met rechtensysteem

Bericht door AarClay » 07 mei 2005, 20:31

mosymuis schreef:
AarClay schreef:Wekt perfect, maar dit gebruikt dus voor elk recht een querie heb ik gehoord, klopt dat?
Nee, het haalt alle rechten in één rij op. Als het goed gebruikt wordt, gebruikt het dus maximaal twee database queries.
Dus ze zitten op wmcity een potje te liegen :).
Dus als ik met $check_right->useradmin en $checkright->usermailer op 1 pagina dan de twee rechten check, worden deze twee objects in 1 querie uitgevoerd? Dus het blijft dan in totaal twee queries
(1 voor de leden ophalen, en 1 voor de usergroep ophalen)

Gebruikersavatar
mosymuis
Berichten: 6940
Lid geworden op: 05 feb 2003, 14:00
Locatie: Amsterdam
Contacteer:

Bericht door mosymuis » 07 mei 2005, 20:34

Ja. Dit omdat de objecten helemaal niet worden uitgevoerd; het zijn geen functies maar variabelen. Wellicht is het logischer om met mysql_fetch_assoc te werken, ipv mysql_fetch_object. Arrays zijn beter te doorgronden.

Gebruikersavatar
AarClay
Berichten: 776
Lid geworden op: 10 feb 2005, 17:12

Bericht door AarClay » 07 mei 2005, 20:48

thnx. Ik voel me zekerder :p.

Donny_nl
Berichten: 463
Lid geworden op: 27 feb 2004, 13:55
Locatie: Rotterdam
Contacteer:

Bericht door Donny_nl » 10 mei 2005, 22:57

Wat is de bedoeling van het script?
Want volgens mij kan het veel makkelijker.
Wil je Poker leren spelen?
SQL leren?

Gebruikersavatar
AarClay
Berichten: 776
Lid geworden op: 10 feb 2005, 17:12

Bericht door AarClay » 11 mei 2005, 13:39

Donny_nl schreef:Wat is de bedoeling van het script?
Want volgens mij kan het veel makkelijker.
Rechten checken. Lees de commentaar maar ;)

Plaats reactie