Avatar billede Slettet bruger
11. marts 2011 - 16:17 Der er 6 kommentarer og
1 løsning

Bruger niveau (2)

Jeg har 5 bruger niveauer på min hjemmeside, og det virker ganske godt, dog med den undtagelse at, jeg kunne godt tænke mig at brugere med niveau 1 kun har adgang til niveau 1, men at brugere med 2 har adgang til niveau 2 men også niveau 1 osv med 3 og 4.
5 er admin og skal derfor ha adgang til alle niveauer.

Hvordan gøres det nemmest?

Login.php
<?php session_start();

    if (isset($_POST['login'])) {

        mysql_connect();
        mysql_select_db();

        $bruger = $_POST["brugernavn"];
        $pass = md5($_POST["password"]);

        $userQuery = mysql_query("SELECT id, brugernavn, password, admin FROM brugere WHERE brugernavn = '$bruger'") or die(mysql_error());
//        $userQuery = mysql_query("SELECT brugernavn FROM brugere WHERE id = '$_SESSION[userid]'") or die(mysql_error());
        if (mysql_num_rows($userQuery) != 1) {
     
            $error = "Brugeren eksisterer ikke (" . mysql_num_rows($userQuery) . ").<br>";
        } else {
            while ($data = mysql_fetch_array($userQuery)) {
         
                $brugerId = $data['id'];
                $brugerNavn = $data['brugernavn'];
                $brugerPass = $data['password'];
                $admin = $data['admin'];
            }
            if ($brugerPass != $pass) {
         
                $error = "Password og brugernavn passer ikke sammen.<br>";
            }
            if (!$error)
            {
         
              $_SESSION["username"] = $brugerNavn;
              $_SESSION["userid"] = $brugerId;
              $_SESSION["admin"] = $admin;
              header("location: $redirect");
            } else {
                echo $error;
            }
        }
    }
?>

Her har bruger 4 kun adgang til level4.php men ikke adgang til tilfojurl.php og det er fint nok, men omvendt skal bruger 5 have adgang til level4.php

  if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '5') {
    echo " &nbsp; <a href='/links/level4.php'>Level 4</a>";
}
  if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '4') {
    echo " &nbsp; <a href='/links/tilfojurl.php'>Tilføj link</a>";
  }


Hvordan gør man det nemmest?
11. marts 2011 - 16:45 #1
Hvad er level 1 til 5?  Er det fem filer med navne level1.php, level2.php, .. level5.php saaledes at hvis en bruger har admin3 skal han have access til level1.php, level2.php, og level3.php, men ikke til level4.php eller level5.php?  Og vil du regulere adgangen ved hjaelp af links saa en user med admin3 faar links at se til de foerste tre filer hvorimod en user med admin5 faar links at se til alle fem filer?

I saa fald vil jeg foreslaa en kode som denne hvor en loekke laver links til level'erne saaledes at en bruger faar lige saa mange links at se som hans admin level:

if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && isset($_SESSION["admin"])
{
  $admin = $_SESSION["admin"];
  for($i = 1; $i <= $admin; $i++) echo "<a href='links/level" . $i . ".php>level" . $i . "php</a> <br>";
}
Avatar billede Slettet bruger
11. marts 2011 - 16:56 #2
Ikke helt, det er forskellige links i forskellige mapper, f.eks. tilføj opskrift, godkend opskrift, tilføj link osv. Jeg vil helst have en if sætning jeg kan flette rundt om echo "link"; det er det jeg har nu, og det synes at virke fint nok, medmindre siden bliver langsom af for mange if sætninger.
Avatar billede Slettet bruger
11. marts 2011 - 17:05 #3
Et udsnit af menuen

// Sub menu
  if($menu=="opskrifter") {
    echo " &nbsp; <a href='soeg.php'>Søg opskrift</a>";
  if (isset($_SESSION["username"]) && isset($_SESSION["userid"])) {
    echo " &nbsp; <a href='indtast.php'>Tilføj opskrift</a>";
  if ($_SESSION["admin"] == '5') {
    echo " &nbsp; <a href='godkend.php'>Godkend opskrift(er)</a>";
  }
  }
  }

  if($menu=="links") {
  if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '5') {
    echo " &nbsp; <a href='/links/index5.php'>Admin links</a>";
}
  if (isset($_SESSION["username"]) && isset($_SESSION["userid"]) && $_SESSION["admin"] == '4') {
    echo " &nbsp; <a href='/links/tilfojurl.php'>Tilføj link</a>";
  }
  }


Det er nok mest for min egen overskueligheds skyld.
Avatar billede intenz Novice
11. marts 2011 - 18:14 #4
Nu ved jeg ikke hvilken variabel der dækker over niveau/level, men jeg går ud fra det er admin.

Som jeg forstår dig, skal alle niveauer have adgang til sit eget niveau og alle niveauer under. Det er rimelig nemt med en if sætning.

Her vil niveau 5 og alle over f.eks. så have adgang til tilfojurl.php.

  if ($_SESSION["admin"] >= 4) {
    echo " &nbsp; <a href='/links/tilfojurl.php'>Tilføj link</a>";
  }


Du skal huske også at lave tjekket på tilfojurl.php også, eller kan man bare taste adressen ind i browseren og få adgang.
Avatar billede intenz Novice
11. marts 2011 - 18:21 #5
Lige en kommentar til:
"medmindre siden bliver langsom af for mange if sætninger"

Det har så lidt indflydelse på hastigheden at det er uden betydning. Brug så mange du føler du har behov for.

For overskuelighedens skyld er det dog rart, at der ikke er for mange if sætninger. Så bliver koden lettere at læse og forstå.
Avatar billede olebole Juniormester
11. marts 2011 - 19:39 #6
<ole>

- og alternativt kan du bruge en switch, som i de fleste sprog afvikler væsentligt hurtigere end et tilsvarende antal if/ifelse. Det, er jeg ret sikker på, også gælder for PHP:
    http://dk2.php.net/manual/en/control-structures.switch.php

/mvh
</bole>
Avatar billede Slettet bruger
11. marts 2011 - 19:57 #7
#4 intenz
Jeg formoder du mener "her vil niveau 4 og alle over have adgang" ?? Jeg kan godt se hvad du mener med >= det virker logisk nok.

Jeg har allerede sikret filerne således at det ikke kun er linket der er vist for den rette, men selve filerne er også beskyttet så det kun er brugere med det rette niveau der har adgang.

Tak for hjælpen alle sammen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester