Omdat we op onze website met verschillende ranks werken,
willen we graag iedere pagina controleren op rank.
Gebruikers met admin-rechten mogen alle pagina's zien.
Gebruikers met member-rechten mogen dit niet.
Hoe kan ik de pagina's vooraf controleren op de gebruikers-rank & indien deze niet genoeg rechten heeft weergeven dat deze pagina voor hem/haar niet toegankelijk is?
Ja, dat kan alleen weet ik zelf niet meer hoe ik dat heb gedaan in mijn eigen site een tijdje geleden. Normaal gezien wordt er een cookie gemaakt wanneer iemand inlogd. Normaal gezien kan je dan een functie maken om te kijken of die cookie bestaat en of de waarde dat er in staat wel klopt.
op het moment dat ze inloggen vul je $_SESSION met de informatie die je wil hebben. Dan is het gewoon een kwestie van te gaan checken op de juiste punten.
Ik heb een functie gemaakt, de functie admin();
Je roept hem aan, en geeft een parameter mee (de 2e is optioneel).
De eerste zegt je welke rang de gebruiker moet hebben, de 2e geeft aan of de gebruiker doorgestuurd moet worden.
Ik maak gebruik van de volgende 2 functies:
Als je ze niet naar een 'verboden'-pagina stuurt, weten potentiele hackers ook niet dat de pagina bestaat. Stuur ze naar je home of een 404-pagina, dan is het moeilijk om erachter te komen of de pagina bestaat of niet.
<?php
session_start();
if ($_SESSION['login']){
if ($_SESSION['rank'] == 'admin') {
//gebruiker is ingelogd en is admin
} else {
//gebruiker is wel ingelogd, maar geen admin
}
} else {
//gebruiker is niet ingelogd
}
?>
Waarom ik deze functie heb? Ik las ooit ergens dat de functie is_numeric niet alleen cijfers toelaat (ofzoiets). Dat was in mijn begintijd met PHP, of het waar is weet ik nog steeds niet, maar sindsdien gebruik ik eigenlijk deze functie. Weet ik tenminste zeker dat het goed zit ;)
afhankelijk van het aantal parameters dat de functie eist. Functie() is uiteraard de functienaam.
In mijn geval, wil je dat iemand minstens rechten 2 moet hebben, en niet door moet worden gestuurd:
Rens, dat kost me teveel typwerk. numeric() heb ik sneller getypt dan ctype_digit(). En zo is het ook 100% beveiligd.
Voor de snelheid hoef ik het niet te doen, of wel?
Bekijk de functie Admin eens goed, en kijk wat die doet.
Die haalt de rechten van de gebruiker op (adhv $_SESSION['id'], het lidid van die persoon). Die wordt vergeleken met de meegegeven rechten.
Je zal de $_SESSION-vars en de MySQL-query wel aan moeten passen op jou tabel en sessie-informatie, maar dat zou geen probleem moeten zijn.