[PHP] Toegangsrechten checken (array's vergelijken)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
Ik heb 2 array's: de eerste beschrijft van welke gebruikersgroepen iemand lid is. De tweede geeft de nummers van de gebruikersrollen die toegang hebben tot een pagina:
code:
1
2
3
4
5
6
7
8
9
10
11
Array ($user)
(
    [2] => docent
    [3] => rector
)
Array ($access)
(
    [0] => 3
    [1] => 4
    [2] => 9
)

Ik ben op zoek naar een snelle manier om te kijken of de gebruiker in ieder geval in 1 groep zit die toegang heeft tot de pagina. Hier zie je dat de groepen met id 3, 4 en 9 toegang hebben. De gebruiker zit in groep 2 en 3. Groep 2 heeft geen toegang, maar groep 3 wel, dus toegang is TRUE.

De enige oplossing die ik kan bedenken is 2 foreach-loops in elkaar. Pseudo:
PHP:
1
2
3
4
5
6
7
8
9
10
function check_access($user, $access) {
  foreach (array_keys($user) as $key) {
    foreach (array_values($access) as $value) {
      if ($key == $value) {
        return TRUE;
      }
    }
  }
  return FALSE;
}

Maar ik vraag me af of er geen snellere manier is?

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Voor zover ik je begrijp zou in_array() jou wel van pas kunnen komen.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

array_search :?

edit: in_array is beter ja :P

iig is het handig om de manual te pakken: http://nl3.php.net/manual/en/ref.array.php

[ Voor 101% gewijzigd door Erkens op 09-08-2005 14:38 ]


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 14:31
Met iets als onderstaand kom je wellicht al een heel eind (wel even controleren):
PHP:
1
2
if (count(array_intersect(array_keys($user), array_values($access)))
  // true

Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
sjroorda schreef op dinsdag 09 augustus 2005 @ 14:37:
Met iets als onderstaand kom je wellicht al een heel eind (wel even controleren):
PHP:
1
2
if (count(array_intersect(array_keys($user), array_values($access)))
  // true
Dat werkt inderdaad perfect :) Ik vraag me af of er veel performance verschil zit tussen verschillende methodes. Misschien voer ik nog eens een kleine benachmark uit. Bedankt!

"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."