Ik ben bezig met mijn eigen forum en dat lukt al aardig. Alleen nu moet ik nog het permissie systeem maken.
De categorien en topics/reply's komen te recht in een database.
Ik heb 5 verschillende rangen om op mijn forum.
1.Bezoeker
2.Gebruiker
3.Moderator
4.Volledig moderator
5.Administrator
Echt wil ik nu weten hoe ik permissies aan iedere categorie kan geven. Het wilde me niet lukken iets te bedenken hoe het precies zit. bijvoorbeeld als de Gebruiker de berichten mag aanpassen mogen de Moderator, Volledig moderator en Admin dat ook. Maar als de Admin alleen iets mag doen mogen de onder staanden dat niet.
Heeft iemand zoiets ooit al gemaakt, of heeft hier informatie over hoe dit gemaakt kan worden. Het liefste met voorbeeld, maar hoeft niet. (voorbeeld om te kijken hoe het werkt, zo leer ik zelf het beste.)
De permissies ga je uiteraard ook allemaal opslaan in een aparte tabel in je database. Vervolgens kun je deze met een koppeltabel koppelen aan een bepaalde gebruikersrang.
Op het punt waar een bepaalde permissie vereist is (vb. het verwijderen van een bericht) controleer je of die permissie gekoppeld is aan de huidige rang van de gebruiker. Zo ja, dan is het toegestaan en anders geef je een foutmelding.
Dit soort systemen (vooral in het geval van fora) kunnen heel uitgebreid en complex worden. Voor goede voorbeelden zou je eens in de broncode van bijvoorbeeld phpBB of vBulletin kunnen duiken.
Ik gebruik de volgende (vereenvoudigde) database structuur voor de rechten:
users:
id (PK)
id_rol (FK)
username
rollen:
id (PK)
rol
rechten_rollen:
id_recht (FK)
id_rol (FK)
rechten:
id (PK)
recht
Iedere user krijgt 1 rol. 1 rol bestaat uit meerdere rechten, deze zijn eenvoudig aan te passen, rechten zijn eenvoudig te beheren, toevoegen of verwijderen stelt niks voor. De ene rol heeft niets te maken met de andere rol, er zit geen niveau in de rechten of rollen. Rechten deel je per rol uit, maar meerdere rollen kunnen uiteraard dezelfde rechten hebben. Net wat jij leuk vindt.
Dat is echt een super goede structuur Frank! Ga deze maar gebruiken voor mijn nieuwe projectje! Ik zat nl erg tegen dit gebeuren aan te hikken, kon door de bomen het bos niet meer zien. Ik ga dit eens even netjes uitwerken!
'Vreemde sleutel', gebruikt om relaties tussen tabellen aan te brengen. Ik ben bang dat als je hier nog nooit van gehoord hebt, de tabellen in je huidige datamodel ook als los zand aan elkaar hangen...
Ik zou daar zeker nog eens goed naar kijken, want zeker voor een forum is het vereist dat je met een goed genormaliseerd datamodel werkt waarin alle onderlinge relaties tussen tabellen bekend en aangebracht zijn.
Jah ik gebruikte nu een andere manier om gegevens uit 2 tabellen te halen. Maar hoe werkt dat precies met die Foreign Key? Moet je dan nog iets aparts instellen in je database en hoe verwijs je naar die andere tabel/rij/kolom? Met PHP, MySQL?
Een FK zit in de database, het is een eigenschap van het datamodel. Het heeft niks met bv. een SELECT-query te maken, het dwingt correcte data af. Wanneer je MySQL gebruikt, zul je de innoDB-engine moeten gebruiken, MyISAM kent namelijk geen foreign keys en is dus geen relationele database.