[php] ACL en gebruik van forums

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • EricBruggema
  • Registratie: Maart 2007
  • Laatst online: 05:26
Beste allemaal,

Voor een site ben ik nu bezig met het werken met ACL, het koste mij zelf heel wat tijd om te leren wat ACL nou precies inhoudt en denk dat ik het nu aardig doorheb, echter zit ik met een probleem; iets waar ik helaas weinig tot niets over kan vinden op internet. Gebruik van ACL in combinatie met forums en andere onderdelen waarbij ik mensen rechten voor bepaalde onderdelen (bv winkels in Groningen, Alle subforums van een bepaald forum, etc).

Mijn huidige opzet van ACL is gebasseerd op het idee van http://net.tutsplus.com/tutorials/php/a-better-login-system/ maar nu wil ik dus extra groepen/rechten opzetten die specifiek te gebruiken zijn voor bv een forum zodat ik een gebruiker moderator kan maken van een forum, meerdere forums of waar dan ook van.. Of juist rechten wil ontzeggen... etc.

Hoe moet ik dit aanpakken? en is er iets wat jullie meer van mij moeten weten? willen jullie code zien? mijn tabellen? etc...

Voorbaat dank!

Acties:
  • 0 Henk 'm!

  • X_lawl_X
  • Registratie: September 2009
  • Laatst online: 03-10 14:13
wat ik altijd doe is een tabel maken met tokens die bestaan, een tabel met roles en een koppeltabel om aan te geven welke roles bepaalde tokens bezitten.

Je kunt dan ook weer een user aan een role toewijzen, en voordat een bepaalde actie wordt uitgevoerd de gebruiker in kwestie het benodigde token heeft.

tokens
keydescription
mod_public_forumKan het publieke forum modereren


roles
idname
1Mod


Koppeltabel
role_idtoken_key
1mod_public_forum


^zoiets dus.In principe kan je het voor het key onderdeel in de token tabel ook een id gebruiken, alleen ik vind zelf een unieke key systeem iets leesbaarder. Krijg je in je code iets van.

PHP:
1
2
3
4
5
6
7
8
<?php
function hasAccess(User $user, $token)
{
    return in_array($token, $user->tokens());
}

hasAccess($user, 'mod_public_forum');
?>

[ Voor 66% gewijzigd door X_lawl_X op 04-09-2010 09:12 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:17

MueR

Admin Tweakers Discord

is niet lief

Hoewel het bovenstaande voorbeeld werkt, zou ik het anders doen :P

Role:
- RoleId
- RoleName
- BanRole (indien true zet je alle tokens in deze role op false. Doe je wel als laatste uiteraard)

Token:
- TokenId
- TokenKey
- BanToken

UserRole:
- UserId
- RoleId
- ForumId (default NULL)

UserToken:
- UserId
- TokenId
- ForumId

Overigens moet je in deze opzet uiteraard niet een "can_moderate" token aanmaken, maar juist meerdere tokens. "can_edit_other", "can_delete_other" etc zijn veel interessanter, omdat ze je toestaan de rechten van een moderator per persoon in te vullen. Indien ForumId in de UserToken/UserRole tabellen leeg is, heb je globaal rechten.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • EricBruggema
  • Registratie: Maart 2007
  • Laatst online: 05:26
Klopt, maar eingelijk wil ik dit inbouwen in het huidige ACL systeem. Juist omdat deze daar ook voor bedoeld is lijkt mij zo... alleen is dit vaak op basis van vaste componenten en dat gaat binnen mijn site niet werken aangezien gebruikers zelf bepaalde zaken kunnen toevoegen en ik daar de rechten per gebruiker weer aan wil koppelen (bv beheer van een winkel) maar ook met hetzelfde systeem de rechten van het forum wil kunnen delen. Als ik nu kijk naar bovenstaande voorbeelden (bedankt!) moet ik aardig wat tabellen extra gaan gebruiken om per forum rechten uit te delen.

Ik zat er aan te denken om mijn ACL iets te veranderen en per groep/recht een veld toe te voegen om aan te geven voor welk onderdeel (component) dit gebruikt kan worden en voor welk ID (forum, winkel) dit geld...

Of zit ik echt fout te denken?

Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 04-10 11:20

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Je bedoelt dus in feite dat je permissies uit elkaar wilt trekken in een actie en een resource? Om vervolgens combinaties van acties en resources toe te wijzen aan een bepaalde rol of gebruiker?

Daar is vast wel een passend DB schema bij te bedenken :)

Beetje vreemd trouwens dat ze dit ACL noemen, terwijl het meer weg heeft van role-based access control. Bij een ACL stel ik me een situatie voor waar aan elke resource een lijstje is gekoppeld met daarin de gebruikers en hun rechten met betrekking tot die resource.

Ik snap ook niet helemaal tegen welk probleem je nu precies aanloopt. Je kan met de oplossing uit die tutorial toch prima voor elk siteonderdeel de nodige permissies aanmaken en aan de juiste gebruikers koppelen? Als een gebruiker dan wat nieuws toevoegt, dan zul je daar op dat moment ook gewoon weer nieuwe permissies voor moeten aanmaken en koppelen etc.

[ Voor 26% gewijzigd door Orion84 op 04-09-2010 10:56 ]

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • HuHu
  • Registratie: Maart 2005
  • Niet online
Orion84 schreef op zaterdag 04 september 2010 @ 10:52:

Beetje vreemd trouwens dat ze dit ACL noemen, terwijl het eigenlijk role-based access control is. Bij een ACL stel ik me een situatie voor waar aan elke resource een lijstje is gekoppeld met daarin de gebruikers en hun rechten met betrekking tot die resource.
Een access-control-list impliceert niet dat het per se om users gaat die je controleert tegen de controle lijst. Als je het onderverdeelt in roles en resources, dan specificeert een ACL welke role toegang heeft tot welke resource.

Naast je ACL is er dus nog een lijst die bijhoudt welke user welke role heeft.

Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 04-10 11:20

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Ik bedoelde de term users ook niet zo zwart/wit, je kan daar uiteraard ook groepen/rollen gebruiken. En sec bekeken ben je dan dus gewoon RBAC aan het implementeren, maar noem je het om de een of andere reden ACL.

Mijn beeld bij ACL was één lijstje per resource, maar dat is ook maar een implementatiedetail natuurlijk.

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • EricBruggema
  • Registratie: Maart 2007
  • Laatst online: 05:26
Orion84 schreef op zaterdag 04 september 2010 @ 10:52:Ik snap ook niet helemaal tegen welk probleem je nu precies aanloopt. Je kan met de oplossing uit die tutorial toch prima voor elk siteonderdeel de nodige permissies aanmaken en aan de juiste gebruikers koppelen? Als een gebruiker dan wat nieuws toevoegt, dan zul je daar op dat moment ook gewoon weer nieuwe permissies voor moeten aanmaken en koppelen etc.
'

Ik zal het even schetsen... ik kan met het huidige systeem wel een gebruiker toegang geven tot het publiceren van nieuws artikelen, toevoegen van gebruikers etc... maar ik wil per gebruiker de mogelijkheid hebben om hun toegang te geven tot bepaalde fora of rechten geven om bepaalde fora te beheren in meer of mindere mate, of juist mensen de toegang tot bepaalde fora te weigeren. Echter met het ACL systeem moet ik dan voor ieder forum een appart rechten groep maken waarbij ik voor ieder forum weer specfieke rechten moet maken en die in de groepen moet zetten. bv

forum 1 (toegankelijk voor iedereen)
forum 2 (toegankelijk voor leden)
forum 3 (toegankelijk voor mods)
forum 4 (toegankelijk voor specifieke leden)

Dus zou dat inhouden dat ik voor ieder forum nu een 10+ tal rechten moet aanmaken om te zorgen dat mensen er toegang tot hebben en zaken kunnen doen (lezen, schrijven, verwijderen, veranderen, verplaatsen, etc). Liefst zou ik dus een oplossing willen hebben dat ik een groep kan linken aan een forum qua rechten en de groep weer kan linken aan gebruikers (of eventueel specifieke rechten) maar dan wel liefst zonder extra tabellen.

Ja ik weet dat mijn uitleg vaak niet de beste is, dus mocht je meer willen weten dan verneem ik het graag.

Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 04-10 11:20

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

Daar kan je dan toch prima het "role" principe uit die tutorial voor gebruiken?

Je maakt rollen aan als:

Admin forum1, lid forum1
Admin forum2, lid forum2
etc.

Waarbij je per rol de juiste rechten instelt. En daarna koppel de juiste rol(len) aan elke gebruiker.

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • EricBruggema
  • Registratie: Maart 2007
  • Laatst online: 05:26
Klopt, alleen zie ik het namelijk nog niet helemaal voor me... (ken je dat?)

Aangezien ik per forum per gebruiker lees en schrijf rechten wil kunnen beperken.

Bv een gast kan het forum inzien
Een lid kan in forums reageren/topics plaatsen etc
Een super lid ziet verstopte forums + kan daarin posten
Een lid kan eventueel ook een forum moderen (of meerdere)
Een admin kan alles beheren

Maar ik zie dus niet voor me hoe ik dit kan bereiken middels ACL aangezien het om specifieke mogelijkheden per forum (bijvoorbeeld) gaat.

ps. sorry voor late bericht, even andere zaken die mijn aandacht nodig hadden! ;)

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 02-10 16:55
Je zult dan twee lijsten moeten hebben:

* Permissies per usergroep
* Permissies per gebruiker

Je leest eerst de permissies voor de gebruiker zijn groep uit, en vervolgens 'overschrijf' je die met gebruikerspermissies. Je krijgt dan twee koppeltabellen (user-permissions en group-permissions), de ene bevat per gebruiker (of: per gebruiker met 'custom' permissies, om overbodige zooi te voorkomen) een rij per gebruiker + permissie, en de ander per gebruikersgroep en permissie.

Acties:
  • 0 Henk 'm!

  • Orion84
  • Registratie: April 2002
  • Laatst online: 04-10 11:20

Orion84

Admin General Chat / Wonen & Mobiliteit

Fotogenie(k)?

EricBruggema schreef op vrijdag 10 september 2010 @ 15:48:
Klopt, alleen zie ik het namelijk nog niet helemaal voor me... (ken je dat?)

Aangezien ik per forum per gebruiker lees en schrijf rechten wil kunnen beperken.

Bv een gast kan het forum inzien
Een lid kan in forums reageren/topics plaatsen etc
Een super lid ziet verstopte forums + kan daarin posten
Een lid kan eventueel ook een forum moderen (of meerdere)
Een admin kan alles beheren

Maar ik zie dus niet voor me hoe ik dit kan bereiken middels ACL aangezien het om specifieke mogelijkheden per forum (bijvoorbeeld) gaat.

ps. sorry voor late bericht, even andere zaken die mijn aandacht nodig hadden! ;)
Dat is dan toch gewoon een kwestie van zorgen dat je al die specifieke rechten opneemt in je ACL?

Dus in plaats van een recht "post comments", heb je "post comments in X", "post comments in Y", etc.

The problem with common sense is that it's not all that common. | LinkedIn | Flickr


Acties:
  • 0 Henk 'm!

  • EricBruggema
  • Registratie: Maart 2007
  • Laatst online: 05:26
Volgens mij heb ik het door.

Stel ik wil 4 forums aanmaken met de volgende rechten per forum

- forum zichtbaar voor gebruiker (j/n) == forum_1_view
- gebruiker mag topic aanmaken (j/n) == forum_1_topic
- gebruiker mag een post plaatsen (j/n) == forum_1_post
- gebruiker beheert forum (j/n) == forum_1_mod

dan heb ik voor ieder forum 4 rechten, dus per 4 forums heb ik 16 rechten per gebruiker die ik eventueel in een groep kan samenvatten.

Klopt dit? mochten jullie suggesties hebben voor de rechten dan hoor ik het graag, kan ik dit in de code verwerken.

Acties:
  • 0 Henk 'm!

  • Matthis
  • Registratie: Juli 2004
  • Laatst online: 13-06 13:45
kijk eens naar http://phpgacl.sourceforge.net/, op het eerste zicht vrij gecompliceerd, maar er is wel goede documentatie voorhanden. Als je het principe eenmaal doorhebt, is het een eitje om je rechtenstructuur op orde te krijgen... Succes!

edit: om je op de goede weg te zetten:

ARO's: gebruikers, eventueel in te delen in groepen
ACO's: view, edit, post, mod
AXO's: forum 1, forum 2, forum 3, ...

[ Voor 24% gewijzigd door Matthis op 12-09-2010 20:26 ]


Acties:
  • 0 Henk 'm!

  • Oid
  • Registratie: November 2002
  • Niet online

Oid

Matthis schreef op zondag 12 september 2010 @ 20:24:
kijk eens naar http://phpgacl.sourceforge.net/, op het eerste zicht vrij gecompliceerd, maar er is wel goede documentatie voorhanden. Als je het principe eenmaal doorhebt, is het een eitje om je rechtenstructuur op orde te krijgen... Succes!

edit: om je op de goede weg te zetten:

ARO's: gebruikers, eventueel in te delen in groepen
ACO's: view, edit, post, mod
AXO's: forum 1, forum 2, forum 3, ...
Is de laatste versie niet een beetje oud? Of is het meer dat deze techniek veranderd?
Pagina: 1