login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Rank controleren? (Opgelost)

Offline Simax - 04/07/2007 13:43 (laatste wijziging 04/07/2007 15:01)
Avatar van SimaxOnbekend Beste mensen,

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?

Alvast bedankt!

24 antwoorden

Gesponsorde links
Offline Jero3n - 04/07/2007 13:49
Avatar van Jero3n PHP interesse Een query uitvoeren waarmee je het veld uitleest waarin staat wat voor rank hij heeft.
En dan met ifs kijken wat daarin staat.
Bijvoorbeeld:

  1. mysql_query(je query om te kijken wat er in dat veld staat)
  2. If($rank==admin) {
  3. echo "Welkom!";
  4. }
  5. Else {
  6. echo "U mag hier niet komen";
  7. }
Offline Simax - 04/07/2007 15:02
Avatar van Simax Onbekend Oke.

Daarnaast zou ik ok graag controleren of de gebruiker wel of niet
is ingelogd.

En zou ik dit ok in een functie kunnen zetten?
Zodat ik niet telkens dezelfde regels moet schrijven,
maar het kan includen.
Offline Godlord - 04/07/2007 15:40
Avatar van Godlord PHP gevorderde 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.
Offline Thomas - 04/07/2007 15:48
Avatar van Thomas Moderator Gebruik > sessies.
Offline Simax - 04/07/2007 15:49 (laatste wijziging 04/07/2007 15:52)
Avatar van Simax Onbekend Ik maak gebruik van sessies .
In de sessies sla ik oa de rank van de gebruiker op.
Offline Koen - 04/07/2007 16:14
Avatar van Koen PHP expert @Jero3n:
  1. <?
  2. If($rank==admin) {
  3. ?>


Een string moet altijd tussen aanhalingstekens!
  1. <?
  2. If($rank == 'admin') {
  3. ?>
Offline TotempaaltJ - 04/07/2007 16:25
Avatar van TotempaaltJ PHP interesse Uhm...
  1. <?php
  2. if($_SESSION['rank'] == 'admin') {
  3. // Je code voor admin.
  4. }
  5. ?>


Zo!:D
Offline Simax - 04/07/2007 16:43
Avatar van Simax Onbekend Ik wil dus de rank controleren..
Wanneer iemand admin is, de pagina weergeven.
Anders een error('U heeft hier geen rechten voor').

Daarnaast wil ik controleren of er iemand is ingelogd?
Hoe kan ik dit het beste doen?
Offline willemw - 04/07/2007 16:52
Avatar van willemw Nieuw lid 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.

zoals op http://www.plaatscode.be/5864/
Offline Simax - 04/07/2007 16:56
Avatar van Simax Onbekend Oke, zover was ik al ongeveer.
Maar hoe kan ik dit het beste toepassen?

Moet ik dit eenmaal toepassen of
op iedere pagina opnieuw aanroepen doormiddel van een functie?
Offline Dark_Paul - 04/07/2007 18:15 (laatste wijziging 04/07/2007 18:18)
Avatar van Dark_Paul PHP ver gevorderde 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:
  1. <?php
  2. function login($send = 0) {
  3. if (!isset($_SESSION['id']) || !numeric($_SESSION['id']) || !isset($_SESSION['login']) || !numeric($_SESSION['login'])) {
  4. if ($send == 1) {
  5. header('Location: login.php');
  6. }
  7. else {
  8. return false;
  9. }
  10. }
  11. else {
  12. return true;
  13. }
  14. }
  15.  
  16. function admin($rights, $send=0) {
  17. $rights = (isset($rights)) ? $rights : 1;
  18. if (login() === TRUE) {
  19. $qmem = mysql_query("SELECT rights FROM members WHERE id=".$_SESSION['id']." ");
  20. $mem = mysql_fetch_assoc($qmem);
  21. if ($mem['rights'] >= $rights) {
  22. return true;
  23. }
  24. elseif ($send == 1) {
  25. header('Location: home.php');
  26. }
  27. else {
  28. return false;
  29. }
  30. }
  31. }


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.
Offline Simax - 04/07/2007 18:52 (laatste wijziging 04/07/2007 18:53)
Avatar van Simax Onbekend Is het ok mogelijk op de manier van willemw?
  1. <?php
  2.  
  3. if ($_SESSION['login']){
  4. if ($_SESSION['rank'] == 'admin') {
  5. //gebruiker is ingelogd en is admin
  6. } else {
  7. //gebruiker is wel ingelogd, maar geen admin
  8. }
  9. } else {
  10. //gebruiker is niet ingelogd
  11. }
  12. ?>


Edit:
Het is niet handig om op iedere pagina zo een lap code te plaatsen.
Offline Ultimatum - 04/07/2007 19:05
Avatar van Ultimatum PHP expert
Citaat:
Edit:
Het is niet handig om op iedere pagina zo een lap code te plaatsen.


Gebruik dan het script van dark_paul, hoef je alleen maar 1 functie te includen
Offline Koen - 04/07/2007 19:05 (laatste wijziging 04/07/2007 19:07)
Avatar van Koen PHP expert @Rimex: Dat is de voornaamste en makkelijkste methode, die gaat zeker.
maar vergeet niet om de

Altijd HELEMAAL vanboven te zetten!
Citaat:
Het is niet handig om op iedere pagina zo een lap code te plaatsen.

en je zult altijd op een of andere manier moeten controleren dat de gebruiker is ingelogd en de functie admin heeft.

@Dark_Paul:
  1. <?
  2. !numeric($_SESSION['id'])

Is het niet:
  1. <?
  2. !is_numeric($_SESSION['id'])

Offline Simax - 04/07/2007 19:14
Avatar van Simax Onbekend Klopt!

Sorry, heb te snel gelezen.
  1. <?php
  2.  
  3. include(functies.php);
  4. ?>

Maar hoe roep ik een functie aan?
Offline Koen - 04/07/2007 19:17
Avatar van Koen PHP expert
  1. <?
  2. include('functies.php'); // includen
  3. login(parameters);
  4. admin(parameters);
  5. ?>

zo?
Offline Simax - 04/07/2007 19:20
Avatar van Simax Onbekend Parameters?
Offline Koen - 04/07/2007 19:24
Avatar van Koen PHP expert
  1. <?
  2. login($send = 0);
  3. admin($rights, $send=0);
  4. ?>

die tussen de haakjes
Offline Simax - 04/07/2007 19:29
Avatar van Simax Onbekend Oke.
Denk wel dat ik het begrijp voor zo ver.

De parameters zijn de dingen die je wilt weten/gebruiken?
Offline Dark_Paul - 04/07/2007 19:33 (laatste wijziging 04/07/2007 19:37)
Avatar van Dark_Paul PHP ver gevorderde @Sliphead:
Nee, ik heb een eigen functie, die ik numeric noem. Heb ik niet aan gedacht, vergeten te posten.
Alsnog de functie:
  1. <?php
  2. function numeric($string) {
  3. return (eregi("^[0-9]+$", $string));
  4. }

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 ;)

@Rimex
Ja, parameters geef je zo mee:
  1. functie($param1, $param2);

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:
  1. admin(2);

wil je dat hij/zij wél door moet worden gestuurd, krijg je:
  1. admin(2,1);

En dat kan je ook met variabele doen, stel in $rechten staat welke rechten je moet hebben, dan werkt het als volgt:
  1. admin($rechten,1); // wordt doorgestuurd índien False
Offline Rens - 04/07/2007 19:35
Avatar van Rens Gouden medaille

Crew algemeen
Dat klopt.
is_numeric laat ook wiskundige notaties toe.
Hier kun je PHP.net: ctype_digit wel voor gebruiken 
Offline Dark_Paul - 04/07/2007 19:38 (laatste wijziging 04/07/2007 19:39)
Avatar van Dark_Paul PHP ver gevorderde 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?
Offline Simax - 04/07/2007 20:28 (laatste wijziging 04/07/2007 20:50)
Avatar van Simax Onbekend @Dark_Paul
De functie login() is opzich vrij simpel.
De functie admin() begrijp ik niet helemaal.

Probeer nu een functie te schrijven waarin de rank word gecontroleerd.
Ik wil namelijk dat bepaalde paginas alleen door admins kunnen worden bekeken.

Iemand die mij uitleg kan geven?


Login.php
  1. <?php
  2. function login($login = 0)
  3. {
  4. if(!isset($SESSION['id']) && !isset($SESSION['login']))
  5. {
  6. if($login = 1)
  7. {
  8. header('Location: login.php');
  9. }
  10. else
  11. {
  12. return false;
  13. }
  14. }
  15. else
  16. {
  17. return true;
  18. }
  19. }
  20. ?>
Offline Dark_Paul - 05/07/2007 10:37
Avatar van Dark_Paul PHP ver gevorderde 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.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.361s