Gå til innhold

Hente ut tilgangsliste fra databasen


Anbefalte innlegg

Har en database med noen tabeller for styring av tilgang på nettsiden.

Nå skal jeg lage en side som lister ut alle brukere og hvilken tilgang de har, men jeg vet ikke helt hvordan jeg skal gå frem.

 

Har kommet på en løsning, men den virker tungvindt og krever en spørring for hver bruker, noe som sikkert ikke er nødvendig?

 

Bruker:

BRUID (PRI, auto_inc)

Navn

 

TilgangsTyper:

tilgangsID (PRI, auto_inc)

tilgangsNavn

 

TilgangsRelasjon:

relID (PRI, auto_inc)

BRUID (fremmednøkkel mot Bruker.BRUID)

tilgangID (fremmednøkkel mot TilgangsTyper.tilgangsNavn)

 

Jeg vil ha en slik liste:

Bruker - Full-tilgang - Nyheter - Kalender - osv

zorac - ja - nei - ja - osv

ola - nei - nei - ja - osv

 

Hvordan kan jeg best løse dette?

Det er også et poeng at jeg i tabellen "TilgangsTyper" kan legge til en ny type og få den med automatisk...

 

Håper noen kan lede meg på rett vei, for foreløpig har jeg bare gjort masse tungvindt og unødvendige greier! :p

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+142

Tror ikke dette kan løses med en enkel sql.

Men her har du mitt forsøk; :)

$q = mysql_query("SELECT b.navn, b.BRUID, t.tilgangID FROM Bruker b INNER JOIN TilgangsRelasjoner t ON b.BRUID=t.BRUID");
if(!$q || mysql_num_rows($q) < 1) die("Feil.. ".mysql_error());
while($r = mysql_fetch_assoc($q)){
$t_id = $r["tilgangID"];
$b_id = $r["BRUID"];
$navn = $r["navn"];
$output_streng = $navn;

$q2 = mysql_query("SELECT tilgangsNavn FROM TilgangsTyper WHERE tilgangsID={$t_id}");
if( mysql_num_rows($q2) < 1) $output_streng .= " - Ingen Tilgang";
else{
 while($r2 = mysql_fetch_assoc($q2)){
  $tilgang = $r["tilgangsNavn"];
  $output_streng .= " - " . $tilgang;
 } // while(query_$q2)
}//if(num_$q2)
echo $output_streng . "<br>\n";
} // while(query_$q)

 

EDIT: når jeg ser over begge postene... Har jeg misforstått oppsettet, kanskje?

Endret av Slettet+142
Lenke til kommentar

Fant akkurat en løsning selv! :w00t:

 

  // Hent ut alle tilgangstyper
 $query = "SELECT tilgangsNavn FROM TilgangTyper ORDER BY tilgangID";
 $result = $this->db_query($query, $conSys);
 
 // Skriv ut alle tilgangstyper som overskrift
 echo "<table width=50%><tr><td><b>Navn</b></td>";
 while  ($row = $this->db_fetch_array($result)) {
 	echo "<td><b>".$row['tilgangsNavn']."</b></td>";
 	$alleTilganger[] = $row['tilgangsNavn'];
 }
 echo "</tr>";
 
 // Hent tilganger til brukerne
 $query = "SELECT Bruker.BRUID, Bruker.Navn, TilgangTyper.tilgangsNavn
   FROM Bruker 
   INNER JOIN (TilgangTyper INNER JOIN TilgangRelasjon ON TilgangTyper.tilgangID = TilgangRelasjon.tilgangID) 
   ON Bruker.BRUID = TilgangRelasjon.BRUID";
   
 $result = $this->db_query($query, $conSys);
 $brukerID = array();
       while  ($row = $this->db_fetch_array($result)) {
         	// Hvis det ikke er lagret noe om denne brukeren enda, legg til i array
         	if (!in_array($row['BRUID'], $brukerID)) {
            $brukerID[] = $row['BRUID'];
               $tilgang[$row['BRUID']]['Navn'] = $row['Navn'];
        }
        // Lagre tilgang i array
       	$tilgang[$row['BRUID']]['tilgang'][$row['tilgangsNavn']] = true;
 }
 
 // Loop igjennom alle brukere
 foreach ($brukerID as $key => $value) {
 	$bruID = $value;
   	echo "<tr><td>".$tilgang[$bruID]['Navn']."</td>";

 	// Loop igjennom alle tilganger som finnes
   	foreach ($alleTilganger as $key2 => $value2) {
   echo "<td>";
   // Hvis denne brukeren har denne tilgangen - JA!
   if ($tilgang[$bruID]['tilgang'][$value2]) echo "JA";
   else echo "NEI";
   echo "</td>";   
 	}
 	echo "</td>";
 }
 
 echo "</table>";

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...