[PHP] useraccess levels

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Ben bezig met het schrijven van een applicatie in PHP.
Ik heb er voor gekozen om het MySQL en $_SESSION de users te laten inloggen en elke pagina te verivieren.
Echter, iets waar ik niet veel over vind en verstand van heb is content op userlevel.

Ik gebruik ongeveer 7 classes waarin ik common taken doe zoals MySQL verbinding, formvalidate, session management, etc.

Mijn vraag is:

Moet ik per onderdeel 1 pagina schrijven die aan de hand van user_level bepaalde content wel of niet laat zien?
Of kan ik per userlevel een pagina scrhijven = geen leuk vooruitzicht maar het zijn gelukkig niet superveel pagina's .
Of bepaalde acties gewoon weigeren vanuit de database = slordig.
Of iets anders....

Ik heb al wat mensen gezien die met if-else werken, maar dat leek me niks.
Het lijkt me dat je via de DB iemands accesslevel ophaalt en daar de content ook uit de database haalt door achter elk stuk content een true of false achter een accesslevel zet. (dus elke access level heeft een tabel met daarin een 1 of 0 respc. true of false)

Heeft iemand ervaring hiermee en kan mij op weg helpen?
Vraag me af wat de juiste en beste methode is.
Qua programeren in PHP kan je me "enigsinds gevorderd" beschouwen, maar zeker geen held ;) of expert.

Thanx. :)

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
hoe ik het doe:
- aan iedere gebruiker in de user-tabel een authorisatie-level toekennen
- in php een array gemaakt die per level een array bevat met welke andere levels daar ook onder vallen. (op die manier kan iemand met een hoog level toch sommige onderliggende levels niet zien).
- bij het inloggen de juiste array in z'n sessie stoppen
- iedere aparte pagina (zoals je 'm in je browser ziet) bovenaan even zetten welk level toegang heeft. dus gewoon $level = 3;
- iedere aparte pagina een bestand laten includen welke de validatie afhandeld en dat gaat dan dus doormiddel van een in_array() -> mocht die niet lukken, dan de footer.php pagina includen en einde script.

Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Oke, dat klinkt al slim.
Maar hoe vertel ik de browser welke content hij wel of niet moet laten zien?
Begrijp nog niet helemaal hoe ik de content moet afstemmen per gebruiker.

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Ik denk dat je dat toch uit komt bij een if-statement + include.. :{
Of een case-switch natuurlijk.

[ Voor 20% gewijzigd door OkkE op 19-11-2003 15:40 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
case switch? wat is dat.

Demk overigens wel dat je gelijk hebt.
Zal idd wel iets worden van:

if ($class->level == true)
include_once("bla.php");

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
PHP:
1
2
3
4
5
6
7
8
9
 // voorbeeldje van die array met auth.levels
$levels = array(
        "1" => array("1"),
        "2" => array("1","2"),
        "5" => array("1","2","5")
        );
 // die sla ik zo op in de sessie:
$_SESSION['login']['level'] = $levels[$row['level']]
 // waarbij $row['level'] het level van de user bevat zoals het in de db staat


voorbeeld van een willekeurige pagina:
PHP:
1
2
3
4
5
6
7
8
$auth_level = 1;
include "../common.php";        // laad default shit, maakt verbinding met db etc.
include $root."/inc/header.php";    // bevat vooral wat standaard html voor de pagina opbouw
                            // en spreekt daarna de validatie pagina aan

 // rest van je code

include $root."/inc/footer.php";


voorbeeld header.php
PHP:
1
2
3
4
5
6
7
8
 // [html shit]
include $root."/inc/validate.php";
if (!in_array($level, $_SESSION['login']['level']))
{
    include $root."/inc/toobad.php";        // melding dat ze niet gemachtigd zijn die pagina te zien
    include $root."/inc/footer.php";
    exit;
}


dit is slechts een vereenvoudigde weergave

[ Voor 31% gewijzigd door marty op 19-11-2003 16:41 ]


Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Maar heb jij dan ook dat bepaalde delen van een pagina enkel niet te zien zijn?
of alleen per pagina?
Ziet er wel overzichtelijk uit die array.

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
in princiepe alleen hele pagina's
maar het is vrij eenvoudig om een deel van een pagina wel of niet te laten zien:

PHP:
1
2
3
4
5
6
7
8
9
10
/* [heleboel code] */
if (in_array("2", $_SESSION['login']['level']))
{
    include "extra.php";
}
else
{
    include "standard.php";
}
/* [nog meer code] */
bijv.

als de pagina opzich dan al voor mensen met level 1 toegankelijk is dan krijgen mensen met level 2 te zien wat er in extra.php staat en anders krijgen ze standaard.php te zien

btw, als het slechts om een klein dingetje gaat is het natuurlijk onzin om een include te gebruiken, maar kun je het beter gewoon in je code neerzetten. het kan soms alleen handig zijn dit onderscheid in verschillende bestanden te zetten. moet je eigenljk alleen wel een wat betere naamgeving hanteren dan ik voorgedaan heb ;)

[ Voor 52% gewijzigd door marty op 19-11-2003 16:56 ]


Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Is het veilig om bepaalde templates via CSS classes te laden?
Om toegang tot de server te krijgen moet je immers eerst voorbij de security check van de DB komen en een geldige SESSION hebben openstaan.

Ik dacht aan bijvoorbeeld:

object = onzichtbaar
object = verzonken

Niet echt profi of wel?

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 12-09 14:07

BierPul

2 koffie graag

Ik doe dit altijd via bitmaskers, zo ken je alles tot op het niveau regelen :)

Hier een voorbeeldje

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
//naam = benodigde masker
$titel = 1;
$textveld = 2;
$datum = 4;
$submitknop = 8;

//Het masker van de persoon (de maskers waar hij recht op heeft bij elkaar opgeteld)
$masker = 7;

//als masker het bitje bevat tonen anders niet
if($titel & $masker) {
    echo("Titel = ja");
} else {
    echo("Titel = nee");
}

echo("<br>");

if($textveld & $masker) {
    echo("Textveld = ja");
} else {
    echo("Textveld = nee");
}

echo("<br>");

if($datum & $masker) {
    echo("Datum = ja");
} else {
    echo("Datum = nee");
}

echo("<br>");
    
if($submitknop & $masker) {
    echo("Submit = ja");
} else {
    echo("Submit = nee");
}

Ja man


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ik zie niet precies wat er onveilig zou kunnen zijn aan een stylesheet??
maar je kan je stylesheet overigens ook dynamisch maken met php. moet je er alleen ff voor zorgen dat je de juiste header meestuurt
Pagina: 1