Database structuur CMS

Gestart doorMiel41 reacties110 weergaven

42 berichten · pagina 1 van 3

Miel

Lid · Topicstarter

Berichten
4.462
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Hoi,

Ik had het al lang in mijn hoofd op een eigen CMS te maken, maar na gisteren, de overwinning van Nederland, wil ik er dan toch maar eens echt aan beginnen.cheer

Het word een CMS in PHP, opgebouwd uit Classes, en met zoals vrijwel ieder CMS, een front-end en back-end.

Tja.. En dan de database structuur. Ik kom niet verder dan de gebruikers en modules tabelbloos
Ik heb een tabel genaamd gebruikers:

gebruikers
-id
-gebruikersnaam
-wachtwoord
//En nog wat extra velden.


Goed, heb ik dat. Nu wil ik ook een tabel met modules, voor de modules uiteraard.yummie
modules
-id
-naam
//Nog wat extra velden die ik nog ga toevoegen, maar die nu niet van belang zijn denk ik.


En dan wil ik nog de rechten hiertussen. Goed, hoe ga ik het best de rechten beheren?
Stel, ik heb een tabel gebruikers_modules_rechten

gebruikers_modules_rechten
-gebruiker_id
-module_id
-recht_type


Tja, hoe sla ik dat recht type op? Alvast bedankt!
0
Berichten
5.957
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Je kan voor nummers kiezen bv. 1 gebruiker 2 is mod 3 beheerder
Bedoel je dat?
0
Berichten
3.788
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Je kan inderdaad gewoon voor nummer kiezen, en dan kan je gewoon controleren:
if($rang > 2) ofzo.
Verder kan het ook met woorden als je dat fijn vind
0
Miel

Lid · Topicstarter

Berichten
4.462
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dat is niet echt universeel..wink Ik moet alles apart kunnen aanpassen.
0
Berichten
8.602
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
bij modules maak je ook een veld, bijv benodigde_rechten

En kijk je dus if ($ranggebruiker >= $fetch[benodigde_rechten])
0
Miel

Lid · Topicstarter

Berichten
4.462
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Ja, maar moet ik dat dan met userlevels ofzo gaan doen?xd
0
Berichten
18.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Wat je kan doen is in de gebruikerstabel een veld maken waarin je alle namen opslaat van de modules waar die user toegang tot heeft. Met stristr kun je dan kijken of een bepaalde module naam voorkomt in dat veld en dus bepalen of die user toegang heeft tot die module
0
Miel

Lid · Topicstarter

Berichten
4.462
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Das best nuub toch? Nee, ik wil echt bepalen wat een gebruiker, per module kan doen.
0
Berichten
2.105
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Dus dat jij aan kan vinken wat die mag doen?
0
Berichten
747
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Zelfde system heb ik ook laatst gemaakt, ook met modules en rechten.

Ik heb 4 tabellen:

1. Gebruikers
2. Functies
3. gebruikers_functies
4. Functies_rechten

zoals je ziet is dit dus gebasseerd op functies/gebruikersgroepen. Je kan gebruikers toevoegen aan groepen (hoeveel maakt niet uit) en die groep heeft bepaalde rechten. Nu weet ik niet of jij dat ook wil of dat je de gebruikers individueel rechten wil geven.

Ik ga er even vanuit dat jij niet met gebruikersgroepen/functies wil gaan werken, zowel zeg het dan even dan leg ik dat ook uit.

Als je niet met groepen wil werken kan je alles in 1 tabel kwijt.

De tabel gebruikers. Hierin komt natuurlijk de standaardinformatie zoals gebruikersnaam, email enz.
Je hebt bijvoorbeeld een module voor een nieuwssysteem. Dan zet je in de tabelstructuur ook een vak met: nieuwsrechten > enum(0,1)
0 = geen toegang
1 = toegang

Vervolgens zet je die voor een individuele gebruiker op 1, deze gebruiker heeft dan toegang.

In je module zet je:

if($gebruikersrow[nieuwsrechten] == 1)
{
//toegang
}
else
{
//geen toegang
}


Volgens mij is dat de simpelste manier.
0
Miel

Lid · Topicstarter

Berichten
4.462
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Bij dit:

Quote:
De tabel gebruikers. Hierin komt natuurlijk de standaardinformatie zoals gebruikersnaam, email enz.
Je hebt bijvoorbeeld een module voor een nieuwssysteem. Dan zet je in de tabelstructuur ook een vak met: nieuwsrechten > enum(0,1)
0 = geen toegang
1 = toegang

Zeg ik ho.. Moet toch anders kunnen dan een row erin te zetten?
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Ik zou zoals arjan al zegt op deze manier gaan werken:

Users
UserGroup
UserGroupRights
Rights

Je geeft bepaalde rechten (Rights: id, naam, omschrijving) een aan groep (UserGroup: id, naam) door ze in de tabel UserGroupRights te zetten (groepid, rechtid. Voor elk recht dat die groep heeft een nieuwe row). Vervolgens heb je in je Users tabel een row "groep" waarin de id komt van de UserGroep

Dan heb je dus:

User -> UserGroup -> UserGroupRights -> Rights

Daardoor kan je voor elke gebruiker binnen een groep bepaalde functies met 1 knop uitschakelen, en kan je een apparte groep maken voor bepaalde mensen als ze bepaalde rechten niet mogen hebben.
0
Berichten
747
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Miel schreef:
Bij dit:

Quote:
De tabel gebruikers. Hierin komt natuurlijk de standaardinformatie zoals gebruikersnaam, email enz.
Je hebt bijvoorbeeld een module voor een nieuwssysteem. Dan zet je in de tabelstructuur ook een vak met: nieuwsrechten > enum(0,1)
0 = geen toegang
1 = toegang

Zeg ik ho.. Moet toch anders kunnen dan een row erin te zetten?
Daarom ook niet in een apparte row maar een appart veld. Een opsomming in mysql gescheiden door commas,punten oid is langzamer en niet handig om te bewerken.

Edit: Zoals rik het zegt is ook een mooie manier met als voordeel dat bepaalde functies per gebruiker zijn in te schakelen of uit te schakelen. Ben wel benieuwd of er nog meer mensen met goede ideeën zijn, dit is wel iets waar ik en ik denk ook veel anderen iets mee kunnen.
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Ja, ik zou inderdaad voor komende projecten graag alternatieven willen weten op mijn bovenstaande methode. Want hoewel het heel flexibel is, is het ook een hele omweg, en een helse query die je moet uitvoeren om de rang van 1 persoon op te halen (je moet over 4 tabellen verspreid dingen gaan ophalen emo )
0
Berichten
18.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Rik schreef:
je moet over 4 tabellen verspreid dingen gaan ophalen emo
En dat is erg omdat? Zo laat je zien dat je goed bent met MySQL coool
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren