[PHP]Access Control List uitbouwen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ZeroXT
  • Registratie: December 2007
  • Laatst online: 09:54
Beste Tweakers,

Ik zit al enig tijd na te denken over een goede Access Control List maar ik zit toch met wat problemen.
De website waarin dit gebouwd moet worden is geprogrammeerd in PHP. Ik zal even met een stukje code laten zien wat ik heb:

PHP:
1
2
3
4
5
6
7
8
9
10
11
/* Rollen, objecten en rechten definiëren */
$ACL = new AccessControlList
(
    array('admin', 'moderator', 'member', 'guest', 'banned'), // Rollen
    array('blog', 'poll', 'forum'), // Objecten
    array('view', 'post', 'vote', 'delete') // Rechten
);

/* Toestemming opvragen */
$ACL->isAllowed('moderator', 'forum', 'post'); // true
$ACL->isAllowed('guest', 'poll', 'delete'); // false


Nu werkt dit perfect maar zit ik met het volgende probleem. Ik wil graag dat moderators alle berichten kunnen verwijderen behalve die van andere moderators en admins.

Dit kan ik niet bereiken met het huidige ACL dus vroeg ik me af of jullie een idee hadden hoe ik dit kan aanpakken. Wordt het een stukje maatwerk of zijn er mogelijkheden om een ACL te maken die dit soort dingen wel kan handelen? :)

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Dan voeg je toch een 'recht' toe, genaamd 'deleteAllMessagesExceptFromOtherModsAndAdmins' (of uiteraards iets leesbaarders)? ;)

Ik ga hierbij dus in op het "kan ik niet bereiken"-gedeelte. Waarom niet? Wat gebeurt er als je een nieuw recht toevoegt en hierop controleert bij het uitvoeren?

[ Voor 55% gewijzigd door CodeCaster op 22-01-2012 13:05 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • RedHat
  • Registratie: Augustus 2000
  • Laatst online: 02-10 20:20
Je kan ook nog een Level (0-99) toevoegen. Zo heeft een Moderator bijvoorbeeld lvl 10, maar een HGA lvl 50 (Waardoor de lvl 10 alleen maar zijn rechtenset heeft over andere lvl 10's en lager bijvoorbeeld). Admin lvl 99, Guest lvl 1, member lvl 5.

Bijvoorbeeld.

Acties:
  • 0 Henk 'm!

  • SvMp
  • Registratie: September 2000
  • Niet online
ZeroXT schreef op zondag 22 januari 2012 @ 12:58:

Nu werkt dit perfect maar zit ik met het volgende probleem. Ik wil graag dat moderators alle berichten kunnen verwijderen behalve die van andere moderators en admins.

Dit kan ik niet bereiken met het huidige ACL dus vroeg ik me af of jullie een idee hadden hoe ik dit kan aanpakken. Wordt het een stukje maatwerk of zijn er mogelijkheden om een ACL te maken die dit soort dingen wel kan handelen? :)
Buiten de ACL afhandelen. Het is vrij logisch dat iemand geen berichten kan verwijderen van een ander met een hogere status. In jouw opzet zijn dat "rollen". Die kun je het beste ordenen van "laag" naar "hoog".

Vervolgens voer je twee controles uit:
- Mag het op grond van de ACL?
- Indien van toepassing op de situatie: Heeft het betrekking op een andere user met een rol die lager staat?

[ Voor 18% gewijzigd door SvMp op 22-01-2012 14:31 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Er is maar een goed antwoord IMHO en dat is de juiste permissie aanmaken en dan gewoon verder gaan met wat je nu ook doet: controleren of iemand die permissie heeft en zo ja uitvoeren en te nee, foutmelding geven.

Er is geen "hoger" / "lager" in ACL's; je kunt wel levels gaan uitdelen etc. maar op de duur ga je daar ook mee in de knoei komen (en het wordt er zéker niet overzichtelijker op). IRL zijn zaken ook helemaal niet zo rechtlijnig; iemand uit "de lagere orde" kan soms best, om z'n werk goed uit te kunnen voeren, wat hogere privileges krijgen. Zo kan een systeembeheerder bijvoorbeeld in iedereens mailbox snuffelen (of dat ethisch is is hier niet aan de orde) en de directie niet.

Als je met "levels" oid randvoorwaarden aan je permissions gaat hangen krijg je straks nooit meer goed inzichtelijk wie nou wat kan/mag. KISS. Iemand heeft een bepaalde permissie of niet; c'est tout.

[ Voor 14% gewijzigd door RobIII op 22-01-2012 17:15 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij