Menu

[PHP Vraag] Rollen systeem met session validatie

Lucas

De avatar van Lucas
  • pussy magnet
  • Donateur
Geplaatst 1 week, 5 dagen geleden

Hallo mensen van Blazor.

Ik maak nu voor school een opdracht waarbij ik een eigen webshop moet maken.
Dit gaat door middel van PHP, HTML, CSS & MySQL. De standaard dingen dus.

Ik ben nu zo ver om een rollen systeem te maken.
Hij moet uit de database halen of een user een klant of een admin is.
Indien de user een klant is, verandert er niks op de dashboard.php pagina.
Indien de user een admin is, komen er extra admin functies zoals klantbeheer, bestellingen bekijken van alle klanten en nog wat extra items.
Dit moet allemaal gebeuren met een session check (met de statement if).
Alleen weet ik niet helemaal waar ik moet beginnen. De tabellen in de database zijn al gemaakt (m.a.w. de role row).

Kunnen jullie mij hiermee helpen?
Groeten van Lucas.

P.S. Als er iets onduidelijk is hieraan, zeg het gewoon en ik nuanceer.

Robin

De avatar van Robin
  • Software engineer
  • Ontwikkelaar
Geplaatst 1 week, 5 dagen geleden

Welke code heb je al geschreven? Wat heb je zelf al geprobeerd? Wat lukt je niet? Hoe ziet je DB er dan uit?

Favorite line of code: try { /*BLAH*/ } catch (Exception) { /* DONT TELL THE USERS, WE SCREWED UP */ }

Lucas

De avatar van Lucas
  • pussy magnet
  • Donateur
Geplaatst 1 week, 5 dagen geleden

Robin
Welke code heb je al geschreven? Wat heb je zelf al geprobeerd? Wat lukt je niet? Hoe ziet je DB er dan uit?

Op de dashboard.php niet veel nog. Ik kan wel een session.php includen zodat gebruikers die niet ingelogd zijn omgeleid worden. In de session.php moet ik waarschijnlijk ook de rol check doen. Dit is mijn session.php:

<?php

   include('db_config.php');
   session_start();

   $user_check = $_SESSION['login_user'];

   $ses_sql = mysqli_query($db,"select username from users where username = '$user_check' ");

   $row = mysqli_fetch_array($ses_sql,MYSQLI_ASSOC);

   $login_session = $row['username'];

   if(!isset($_SESSION['login_user'])){
      header("location: login.php");
   }
?>

Het tabel van de users ziet er zo uit:

Ik heb nog vrij weinig ervaring met PHP, en op internet staan wel dingen, maar ik weet niet echt precies hoe ik dat altijd goed in mijn gemaakte systeem werkend kan krijgen.

Sulka

De avatar van Sulka
  • Donateur
  • Donateur
Geplaatst 1 week, 5 dagen geleden Sulka

Lucas

Robin
Welke code heb je al geschreven? Wat heb je zelf al geprobeerd? Wat lukt je niet? Hoe ziet je DB er dan uit?

Op de dashboard.php niet veel nog. Ik kan wel een session.php includen zodat gebruikers die niet ingelogd zijn omgeleid worden. In de session.php moet ik waarschijnlijk ook de rol check doen. Dit is mijn session.php:

<?php

   include('db_config.php');
   session_start();

   $user_check = $_SESSION['login_user'];

   $ses_sql = mysqli_query($db,"select username from users where username = '$user_check' ");

   $row = mysqli_fetch_array($ses_sql,MYSQLI_ASSOC);

   $login_session = $row['username'];

   if(!isset($_SESSION['login_user'])){
      header("location: login.php");
   }
?>

Het tabel van de users ziet er zo uit:

Ik heb nog vrij weinig ervaring met PHP, en op internet staan wel dingen, maar ik weet niet echt precies hoe ik dat altijd goed in mijn gemaakte systeem werkend kan krijgen.

Pas op voor SQL injection. Ik zou een PHP framework gebruiken. Een heel fijn framework om mee te werken is CakePHP.

Waarom zou je Cake gebruiken? Meer info

Lucas

De avatar van Lucas
  • pussy magnet
  • Donateur
Geplaatst 1 week, 5 dagen geleden

Sulka

Lucas

Robin
Welke code heb je al geschreven? Wat heb je zelf al geprobeerd? Wat lukt je niet? Hoe ziet je DB er dan uit?

Op de dashboard.php niet veel nog. Ik kan wel een session.php includen zodat gebruikers die niet ingelogd zijn omgeleid worden. In de session.php moet ik waarschijnlijk ook de rol check doen. Dit is mijn session.php:

<?php

   include('db_config.php');
   session_start();

   $user_check = $_SESSION['login_user'];

   $ses_sql = mysqli_query($db,"select username from users where username = '$user_check' ");

   $row = mysqli_fetch_array($ses_sql,MYSQLI_ASSOC);

   $login_session = $row['username'];

   if(!isset($_SESSION['login_user'])){
      header("location: login.php");
   }
?>

Het tabel van de users ziet er zo uit:

Ik heb nog vrij weinig ervaring met PHP, en op internet staan wel dingen, maar ik weet niet echt precies hoe ik dat altijd goed in mijn gemaakte systeem werkend kan krijgen.

Pas op voor SQL injection. Ik zou een PHP framework gebruiken. Een heel fijn framework om mee te werken is CakePHP.

Waarom zou je Cake gebruiken?

Een vriend van mij heeft al een test gedaan met SQL injection, hij kwam er niet doorheen door een escape.

Robin

De avatar van Robin
  • Software engineer
  • Ontwikkelaar
Geplaatst 1 week, 5 dagen geleden

Los van de niet-genormailseerde database, kan je idd een check doen in session.php en op basis daar van dan kijken of een gebruiker meer mag zien of niet.

Favorite line of code: try { /*BLAH*/ } catch (Exception) { /* DONT TELL THE USERS, WE SCREWED UP */ }

Sulka

De avatar van Sulka
  • Donateur
  • Donateur
Geplaatst 1 week, 5 dagen geleden Sulka

Lucas

Sulka

Lucas

Robin
Welke code heb je al geschreven? Wat heb je zelf al geprobeerd? Wat lukt je niet? Hoe ziet je DB er dan uit?

Op de dashboard.php niet veel nog. Ik kan wel een session.php includen zodat gebruikers die niet ingelogd zijn omgeleid worden. In de session.php moet ik waarschijnlijk ook de rol check doen. Dit is mijn session.php:

Ik heb nog vrij weinig ervaring met PHP, en op internet staan wel dingen, maar ik weet niet echt precies hoe ik dat altijd goed in mijn gemaakte systeem werkend kan krijgen.

Pas op voor SQL injection. Ik zou een PHP framework gebruiken. Een heel fijn framework om mee te werken is CakePHP.

Waarom zou je Cake gebruiken?

Een vriend van mij heeft al een test gedaan met SQL injection, hij kwam er niet doorheen door een escape.

Ik zou echt wel prepared statements gaan gebruiken, dit is niet de manier hoe dit de dag van vandaag wordt gedaan. Ook is het belangrijk om je variabelnamen een betekenisvolle naam te geven, $sess_sql is bijvoorbeeld niet oke.

Lucas

De avatar van Lucas
  • pussy magnet
  • Donateur
Geplaatst 1 week, 5 dagen geleden Lucas

Sulka

Lucas

Sulka

Lucas

Robin
Welke code heb je al geschreven? Wat heb je zelf al geprobeerd? Wat lukt je niet? Hoe ziet je DB er dan uit?

Op de dashboard.php niet veel nog. Ik kan wel een session.php includen zodat gebruikers die niet ingelogd zijn omgeleid worden. In de session.php moet ik waarschijnlijk ook de rol check doen. Dit is mijn session.php:

Ik heb nog vrij weinig ervaring met PHP, en op internet staan wel dingen, maar ik weet niet echt precies hoe ik dat altijd goed in mijn gemaakte systeem werkend kan krijgen.

Pas op voor SQL injection. Ik zou een PHP framework gebruiken. Een heel fijn framework om mee te werken is CakePHP.

Waarom zou je Cake gebruiken?

Een vriend van mij heeft al een test gedaan met SQL injection, hij kwam er niet doorheen door een escape.

Ik zou echt wel prepared statements gaan gebruiken, dit is niet de manier hoe dit de dag van vandaag wordt gedaan. Ook is het belangrijk om je variabelnamen een betekenisvolle naam te geven, $sess_sql is bijvoorbeeld niet oke.

Je moet wel even weten dat ik net met PHP begin en dat ik niet aan alles wat de ontwikkelaars van tegenwoordig doen meteen in beheersing heb.
We gaan later meer security doen zeiden ze tegen mij.

Koen

De avatar van Koen
  • Donateur
  • Donateur
Geplaatst 1 week, 5 dagen geleden

Laten we dit even makkelijk benaderen.

Je kan via de database controleren welke user iemand is en of je mag inloggen. Dan kan je toch ook de inhoud van de column role ophalen? Daarin staat dan of iemand admin is of niet. Zo ja, dan toon je extra dingen. Sla het bijvoorbeeld op in de sessie.

StoutePaasHaas

De avatar van StoutePaasHaas
  • Tim is de liefste paashaas!
  • Donateur
Geplaatst 1 week, 5 dagen geleden StoutePaasHaas

Wat Koen zegt lijkt me ook het handigste voor jou,

$_SESSION['role'] = $row['role'];

dan kan je in je template een if maken:

if($_SESSION['role'] === 'admin') {
   echo 'bijv een button etc';
}

Wat ik nog netter zou vinden:

<?php if($_SESSION['role'] === 'admin'): ?>
Hier jouw admin stuff van html shit
<?php endif; ?>

Matthijs

De avatar van Matthijs
  • Geregistreerd lid
  • Geregistreerd
Geplaatst 1 week, 5 dagen geleden

select username from users where username = '$user_check'

Dit is je eerste SQL injection al.😛

Lucas

De avatar van Lucas
  • pussy magnet
  • Donateur
Geplaatst 1 week, 5 dagen geleden

Ik ben eruit gekomen. Ik heb het nu werkend gekregen, met dank aan Koen, Robin en StoutePaasHaas. Nu kan het topic wel weer dicht. Ik vroeg niet om tips te krijgen over de veiligheid mankementen trouwens. Ik had daar al eerder antwoord op gegeven waarom niet.

Snel reageren

Flag Content
Processing...

Geef een duidelijke reden waarom een administrator naar deze post moet kijken