Inloggen met rechten - opbouw van tabellen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Daan

Daan

13/02/2007 20:05:00
Quote Anchor link
Hey..
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
 
PHP hulp

PHP hulp

20/11/2024 04:29:28
 
Frank -

Frank -

13/02/2007 20:09:00
Quote Anchor link
Quote:
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?
Ja, ga normaliseren. Zie de tutorials.

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 -
 
Manaus

Manaus

13/02/2007 20:10:00
Quote Anchor link
maak een veld aan met rechten die standaard '0' is en als 1 is dan...
2 dan...
3 dan...
Etc...
MvG,Manaus
 
Daan

Daan

13/02/2007 20:27:00
Quote Anchor link
Thx voor de tutorial. Hoop dat ik er wat mee kan.
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..
 
Frank -

Frank -

13/02/2007 20:37:00
Quote Anchor link
Maak diverse rollen aan en geef iedere rol de rechten die nodig zijn. Een gebruiker koppel je aan een rol en klaar ben je.

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 -
 
Daan

Daan

13/02/2007 20:38:00
Quote Anchor link
't komt ineens in me op..

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
 
Frank -

Frank -

13/02/2007 20:51:00
Quote Anchor link
Nee, dat is niet de oplossing. Je moet nog verder normaliseren, zie mijn voorbeeld. Wanneer jij 2x dezelfde waarde, bv. Agenda, opslaat, moet je jezelf afvragen of dat wel goed is. Wat gaat er gebeuren als je 'Agenda' verandert in 'agenda' of 'aagenda' ? Dat gaat fout, 1 of meerdere records die dezelfde waarde horen te hebben, hebben nu een andere waarde. Kortom, je bent een corrupte database rijker.

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.
 
Daan

Daan

13/02/2007 21:07:00
Quote Anchor link
Oke, het meeste snap ik..
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?
 
Frank -

Frank -

13/02/2007 21:15:00
Quote Anchor link
dependency = afhankelijkheid.

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.
 
Daan

Daan

13/02/2007 21:26:00
Quote Anchor link
Ok is nu duidelijk..
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!!
 
Frank -

Frank -

13/02/2007 21:42:00
Quote Anchor link
Ligt aan jouw toepassing of deze opzet correct is. Op zich is het aanmaken van een agenda-item niet afhankelijk van het kunnen lezen van agenda-items. Voor het updaten van een item ben je echter wel afhankelijk van het lezen, wanneer jij het id niet kunt selecteren, valt er weinig te updaten.

Het kan dus heel goed op deze manier worden ingericht.

Quote:
Je geeft de webmaster toch gewoon alle rechten?
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.
 
Daan

Daan

13/02/2007 21:45:00
Quote Anchor link
Oke, thx voor de info
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.