[DB-Design] User Rights System

Pagina: 1
Acties:

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
Hoi beste Tweakers,

Ik ben bezig zelf een forum te maken (ik hou niet van die standaard dinge, maak het liever zelf) maar nu wou ik er ook een soort rechten-systeem inbouwen, net zoals hier op GoT.

Maar hoe kan ik dat het besten opzetten?

Via Google werd ik niets wijzer, en de GoT-Search ligt al even plat.

Zelf heb ik ookal wat bedacht, maar loop telkens ergens op vast.

code:
1
2
3
4
5
6
7
8
9
10
Tabel: rights
----------------------------------------------------------------
|  id|     name|color_change|post_edit|html_rights|post_del|...|
----------------------------------------------------------------
|0001|    Admin|        true|     true|       true|    true|...|
----------------------------------------------------------------
|0002|      Mod|        true|     true|       true|    true|...|
----------------------------------------------------------------
|0003|Light Mod|        true|     true|       true|   false|...|
----------------------------------------------------------------


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Tabel: rights_parts
-------------------------
|  id|        name|value|
-------------------------
|0000|color_change| 0001|
-------------------------
|0001|   post_edit| 0002|
-------------------------
|0002| html_rights| 0004|
-------------------------
|0003|    post_del| 0008|
-------------------------

Tabel: rights
----------------------
|  id|     name|value|
----------------------
|0001|    Admin|  255|
----------------------
|0002|      Mod|  242|
----------------------
|0003|light-mod|  167|
----------------------


bij Idee1 is het probleem dat het een slechte strucuur heeft, telkens als er een nieuw onderdeel bijkomt, moet de tabel-structuur aangepast worden

bij Idee2 is het probleem dat de values totaal veranderd moeten worden bij het toevoegen van een nieuw onderdeel in right_parts (value van rights = alle values van right_parts opgeteld)

mijn vraag is nu dus:
Weten jullie een goede manier om dit op te lossen?
en hoe is dat geregeld bij GoT zelf?

WhatPulse! - Rosetta@Home - Docking@Home


Verwijderd

Een tabel groep.
Groep_id
Groep_Naam


Een tabel gebruiker.
Gebruiker_Id
Gebruiker_Naam


Een tabel functie.
Functie_id
Functie_Omschr


Een tabel authorisatie.
groep_id
functie_id


Een tabel gebr_groep .
groep_id
gebruiker_id


Zo kan je alles en iedereen koppelen/autoriseren.

Een gebruiker behoort dus tot 1 of meerdere groepen
Een groep heeft rechten op een aantal functies
functie's zijn dan oa. Delete Post,Create Post, Edit Post etc. etc.

[ Voor 60% gewijzigd door Verwijderd op 16-08-2003 19:11 ]


  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 19:50

ripexx

bibs

Zoek eens binnen PW op 'rechten systeem', 'role based rights' en 'bit wise rechten', ik denk dat je dan wel het een en ander tegen zult komen. Helaas is de search op dit moment down, maar er is genoeg info over te vinden. :)

buit is binnen sukkel


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15-08 18:56

alienfruit

the alien you never expected

Grapjas, zoekmachine werkt niet hoor :)
Maar het tweede idee lijkt met toch beter dan het eerste. Op het werk hebben model als gebruiker, roles (waarbij het of een gebruikergroep (bij is_role = false) of een role) en dan nog een koppeltabel rechten tto roles. Geen flauw idee of dat goed is, eerlijk gezegt.

[ Voor 96% gewijzigd door alienfruit op 16-08-2003 19:11 ]


  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
maui71, als ik vragen mag, wat is het verschil precies tussen de tabel groep, en de tabel gebr_groep?

WhatPulse! - Rosetta@Home - Docking@Home


Verwijderd

De tabel gebr_groep , koppelt dus een bepaald gebruiker aan een bepaalde groep.
De tabel groep, is gewoon standaard tabel, met groep gegevens, zeg maar. dus groep naam, en wat je er verder wilt ingooien.

[ Voor 45% gewijzigd door Verwijderd op 16-08-2003 19:14 ]


  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
Ok, hartstikke bedankt, ik ga hier eens mee aan de slag.
Dit ontwerp voldoet alvast 100% aan mijn eisen, misschien dat ik er nog een aanpassing op maak, maar dat zie ik later nog wel

nogmaals: THANK YOU! _/-\o_

ik ben met zoeken al heel lang mee bezig geweest, en heeft me echt veel tijd gekost,
eindelijk iets wat gaat werken!

WhatPulse! - Rosetta@Home - Docking@Home


  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 19:50

ripexx

bibs

Ik gebruik het volgende, ik heb 5 tabellen. gebruikers, gebruiks-groep, groepen, groepen-recht en rechten.

Ik defineer eenmalig voor elke grope de rechten, als er nu een gebruiker bij komt dan koppelje deze aan een groep. Voordeel is dat je alleen de groepen hoeft te koppelen en die eenmalig moet instellen. Zelfde dus als maui71. :)

Zover ik weet gebruikt react een over ervend rechten systeem wat Chem heeft ontwikkeld. Code staat ergens in een topic op GoT. -> [rml][ php/[ my]sql] inherited rechtensysteem[/rml] Hier mee kan je behalve gebruikers aan groepen ook nog losse rechten aan users hangen enz. Mooi maar ingewikkeld systeem om te bouwen.

@alienfruit duh, staat toch duidelijk in mijn post 8)7

buit is binnen sukkel


Verwijderd

ripexx schreef op 16 augustus 2003 @ 19:22:
] Hier mee kan je behalve gebruikers aan groepen ook nog losse rechten aan users hangen enz.
Op zich niet zo'n probleem, je maakt dan gewoon voor iedere gebruiker (X) automatisch 1 groep (X). Die groep heeft dan alleen gebruiker (X) als lid.

Voor de rest gewoon goed uitzoeken welke groepen je moet maken, en welke groepen welke rechten krijgt.

[ Voor 15% gewijzigd door Verwijderd op 16-08-2003 19:27 ]


Verwijderd

Wat je nog extra kunt doen, en dat doe ik zelf ook, is de rechten aan een groep te koppelen dmv een koppeltabel. Je kunt op deze manier ook rechten zonder tussenkomst van een andere groep overriden.

  • Not Pingu
  • Registratie: November 2001
  • Laatst online: 18-08 10:07

Not Pingu

Dumbass ex machina

Ik heb voor mijn forumsysteem (spammerdespam) een group-based rechtensysteem. Echter kan een user maar in 1 group zitten en kan een board slechts gereserveerd worden voor 1 group.
Het probleem wat ik had zat em in de SQL queries die erg ingewikkeld worden.

Stel je hebt een tabel tblBoards, een tblUsers, een tblGroups, een tblUseringroup, en een tblBoardrestrict.

tblBoards bevat de board info (ID en titel)
tblUsers de userinfo (ID, naam en regdatum)
tblGroups zijn de usergroups (ID en titel)
tblUseringroup is de koppeling user -> group (User ID en Group ID)
tblBoardrestrict bevat de regels van welk board prive voor welke usergroup is (Board ID en Group ID)

het probleem:
Ik wil een overzicht genereren van alle boards waarbij alle boards weergegeven moeten worden behalve degene waartoe de desbetreffende user geen toegang heeft. zo'n query is me helaas nog niet gelukt. je moet nl. alle 5 die tabellen aan elkaar koppelen, en dan wordt het erg onoverzichtelijk.

een query als:

SQL:
1
2
3
4
5
6
SELECT BrdTitle FROM tblBoards 
INNER JOIN 
((tblUsers INNER JOIN tblUseringroup ON tblUsers.UsrID = tblUseringroup.UigUser) 
INNER JOIN tblBoardrestrict ON tblUseringroup.UigGroup = tblBoardrestrict.BrsGroup) 
ON tblBoards.BrdID = tblBoardRestrict.BrsBoard
WHERE UsrID = 1;

geeft alleen de boards die prive zijn voor de usergroup van de desbetreffende user
(note: dit is een MS Access query)

hoe hebben anderen hun rechtensysteem dmv. SQL toegepast? hartelijk dank voor suggesties :)

modbreak: die URL naar je forum voegt niets toe aan je post en is dus 'spam', bij deze verwijderd. Interessante links heb je een homepage-veld voor in je profile en een signature. Verder heb ik even een enter in je code geplaatst tbv de layout

[ Voor 13% gewijzigd door curry684 op 17-08-2003 18:17 ]

Certified smart block developer op de agile darkchain stack. PM voor info.


Verwijderd

Heel simpel, je maakt een koppeltable, waarin je de koppeling tussen een recht en een groep opneemt. Als je deze table cached, heb je ook geen last van performance hits.

  • KompjoeFriek
  • Registratie: Maart 2001
  • Laatst online: 02-01 05:18
Ik ben een tijdje aan het prutsen geweest met het idee van maui71, en hier wat aanpassen , daar wat aanpassen, nee toch weer zo... en dat moet dan zoow....

en dan:
Afbeeldingslocatie: http://kompjoefriek.homeip.net/images/tweakers/DBConcept_Tabelluntjuns.jpg

het resultaat lijkt wel weer verdacht veel op jou ontwerp maui71 :P

[edit]
ow ja, en phear my 1337 paint-skillz :X

[ Voor 11% gewijzigd door KompjoeFriek op 15-07-2004 02:09 ]

WhatPulse! - Rosetta@Home - Docking@Home


Verwijderd

KompjoeFriek schreef op 18 augustus 2003 @ 14:23:
Ik ben een tijdje aan het prutsen geweest met het idee van maui71, en hier wat aanpassen , daar wat aanpassen, nee toch weer zo... en dat moet dan zoow....

en dan:
[afbeelding]

het resultaat lijkt wel weer verdacht veel op jou ontwerp maui71 :P

[edit]
ow ja, en phear my 1337 paint-skillz :X
Na, mijn ontwerp is het niet, het is gewoon een beproefde manier (1 van de) om authorisatie's te gebruiken in desktop applicaties.

Ik neem aan dat je de func_groep tabel gaat gebruiken , om daar in op te slaan/checken wat een groep (dus gebruiker), mag doen?

Let er wel op, dat een gebruiker in dit model dus de som van autorisaties van alle groepen waar hij lid van is als autorisaties heeft.
Pagina: 1