Inloggen met rechten - opbouw van tabellen
Ik heb een vraagje.. (Jah logisch, daarvoor is dit forum :P)
Ik wil een inlog systeem maken waarbij je verschillende rechten kunt hebben..
't liefst heb ik dat zoveel mogelijk in een MySQL-database wordt gezet..
't volgende moet mogelijk zijn:
- Home - kan iedereen zien, ook zonder inloggen
- Mijn instellingen - kan iedereen zien die is ingelogd
- Financien - kunnen de geldbeheerder en webmaster zien
- Agenda - kan iedereen die in de leiding en werkgroep zit en de webmaster zien
- Activiteiten - kan iedereen die in de werkgroep zit en de webmaster zien
- Leiding - kan iedereen die in de leiding zit en de webmaster zien
Iedereen die inlogd is dus lid van een groep (bijv. everyone, werkgroep, financien of webmaster) en iedere groep heeft bepaalde rechten.
De pagina kan dus door de leiding en door de werkgroep gezien worden, de pagina agenda alleen door de werkgroep en de pagina leiding alleen door de leiding. De webmaster moet alles kunnen zien.
Wat is de beste manier om de tabellen op te bouwen?
Wat ik nu heb is dat in de tabel 'Pages' een colom staat met de id's van de groepen die toegang tot deze pagina moeten hebben, gescheiden door komma's. Deze id's haal ik in het php-script weer uit elkaar.
Mijn vraag is:
Is er een manier om te zorgen dat ik niet meerdere waarden in één cel hoef te stoppen, zodat ik die in mijn script niet meer uit elkaar hoef te halen?
Alvast bedankt..
Gewijzigd op 01/01/1970 01:00:00 door Daan
Quote:
Ja, ga normaliseren. Zie de tutorials.Is er een manier om te zorgen dat ik niet meerdere waarden in één cel hoef te stoppen, zodat ik die in mijn script niet meer uit elkaar hoef te halen?
In een goed datamodel staan er nooit meerdere waardes in 1 record.
Edit: service van de zaak...
Gewijzigd op 01/01/1970 01:00:00 door Frank -
2 dan...
3 dan...
Etc...
MvG,Manaus
Had al gezocht, maar kon niks vinden.
@ Manaus: Dan krijg je dus de volgende tabel:
Rechten
- rechtenNr
- rechtenGroep
en in de tabel 'Pages' een veld met een 'rechtenNr'.
Maar dan heb je nog steeds dat er meerdere groepen per rechtenNr moeten komen. Bij de pagina 'Activiteiten' moeten 'werkgroep' en 'webmaster' toegang krijgen. Dat zijn weer twee waardes..
role:
id
name
role_permissions:
id
id_role
id_permission
permissions:
id
name
permission_dependency (wanneer een permissie afhankelijk is van 1 of meerdere andere permissies):
id
id_permission_1
id_permission_2
Gebruik wel de innoDB-engine van MySQL, anders kun je geen foreignkeys gebruiken. En hangt de boel als los zand aan elkaar...
Edit: Foutje uit de tabel 'roles' gehaald.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Dit is de oplossing:
Tabel 'Toegang':
pagina | groep
Agenda | werkgroep
Agenda | leiding
Agenda | webmaster
Activiteiten | werkgroep
Activiteiten | webmaster
Leiding | leiding
Leiding | webmaster
bedankt voor de reacties
Gewijzigd op 01/01/1970 01:00:00 door Daan
Wanneer je mijn voorbeeld pakt, dan sla je 'pagina' op in de tabel 'permissions' en 'groep' wordt opgeslagen in de tabel 'role'. De tabel role_permissions koppelt de boel vervolgens netjes aan elkaar. Alle gegevens worden slechts 1x opgeslagen, precies zoals het hoort.
Snap alleen niet wat permission_dependency doet..
En hoe zorg ik ervoor dat bijvoorbeeld de webmaster meerdere permissies krijgt? Moet dat met die permission_dependency?
Er zijn rechten die afhankelijk zijn van andere rechten. Iemand kan bv. toegang krijgen tot de agenda, maar niet mogen updaten. Iemand die wel mag updaten, moet natuurlijk wel mogen lezen. Dat is dus een afhankelijkheid.
CRUD(a) is een veel gebruikte methode om vast te stellen wat iemand nu wel of niet mag.
C = create
R = read
U = update
D = delete
a = archive
Voor een U, D en a heb je R nodig, anders valt er niets te selecteren om te updaten, verwijderen of archiveren.
Meerdere permissies krijg je door eerst alle permissies aan te maken en de rollen. Dit levert een hele serie id's op in deze 2 tabellen. In de tabel role_permissions geef je in de kolom id_role het id van de rol op en in de kolom id_permission het id van de permissie die je wilt toekennen.
Voorbeeldje:
Role:
id name
1 webmaster
Permissions:
id name
1 read agenda
2 create agenda-item
3 update agenda-item
role_permissions:
id id_role id_permission
1 1 1
2 1 2
3 1 3
Ps. Staat een foutje in het voorbeeld van het datamodel, zal hem even updaten.
Snap alleen nog steeds niet goed wat er in Permission_dependency moet komen (zal wel aan mij liggen).
Zou daar het volgende moeten?
Permission_dependency:
id id_permission_1 id_permission_2
1 2 1 (id 2 is afhankelijk van 1)
2 3 1 (id 3 is afhankelijk van 1)
Heb ik het zo goed? En wat is hier het nut van (behalve extra controle)? Je geeft de webmaster toch gewoon alle rechten?
Heel erg bedankt voor het meedenken..
'k Kan 't goed gebruiken!!
Het kan dus heel goed op deze manier worden ingericht.
Quote:
Waarom? Ik zou niet weten waarom een webmaster rechten zou moeten krijgen over content waar iemand anders eigenaar van is. Hij kan dan wel de beheerder zijn van de database, maar dat wil niet zeggen dat hij/zij content van een ander kan aanpassen. Ik zou er voor kiezen om de webmaster hooguit de status van een item aan te laten passen, maar geen mogelijkheid te geven om de inhoud te veranderen.Je geeft de webmaster toch gewoon alle rechten?
Oke, thx voor de info