Pagina 1 van 1

Probleem met rechtensysteem

Geplaatst: 07 mei 2005, 17:34
door AarClay

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 ?

Re: Probleem met rechtensysteem

Geplaatst: 07 mei 2005, 19:47
door mosymuis
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.

Re: Probleem met rechtensysteem

Geplaatst: 07 mei 2005, 20:31
door AarClay
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)

Geplaatst: 07 mei 2005, 20:34
door mosymuis
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.

Geplaatst: 07 mei 2005, 20:48
door AarClay
thnx. Ik voel me zekerder :p.

Geplaatst: 10 mei 2005, 22:57
door Donny_nl
Wat is de bedoeling van het script?
Want volgens mij kan het veel makkelijker.

Geplaatst: 11 mei 2005, 13:39
door AarClay
Donny_nl schreef:Wat is de bedoeling van het script?
Want volgens mij kan het veel makkelijker.
Rechten checken. Lees de commentaar maar ;)