[database ontwerp] Binaire autorisatie *

Pagina: 1
Acties:

  • _DeWie_
  • Registratie: November 2001
  • Laatst online: 10-04 16:23
Normaal gesproken gebruik ik voor projecten waarin een autorisatie nodig is
altijd de volgende structuur :

usertabel
groeptabel
usergroeptabel ( koppelen users aan groups)

als er dan een autorisatie moet worden verleend voor bijvoorbeeld een
tabel projecten dan maak ik een tabel aan autprojecten waarin ik groepen rechten geef.

Aangezien je hierdoor erg veel extra tabellen heb ben ik de mogelijkheden voor een binaire methode aan het onderzoeken.

Ik kom tot het volgende :

Tabel Users :
-----------------------
id
naam
groups (decimal bin groups)

Tabel Groups :
-----------------------
id
naam
bin

Nu kan ik dus in de tabel users in het veld groups middels het binair stelsel (bin)
alle groupen aangeven

Nu heb ik een tabel projecten :

Tabel Projecten
-----------------------
id
naam
groups

In groups sla ik alle groepen op ( decimal ) die rechten hebben op het betreffende project.

Nu heb ik na een inlog van de gebruiker decimal de groupen waar die lid van is.
Nu moet ik deze dus vergelijken met de groupen die in een bepaald project mogen.
Is dit middels een sql opdracht op te lossen ??

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Ja, vast wel. Maar ik zou eerlijk gezegd 't ontwerp ietsjes aanpassen. Een tabel aanmaken die de relatie group tot user beschrijft, en een tabel die de relatie group of user tot recht beschrijft. Kortom, eenvoudige N:M relatie :) Veel eenvoudiger te "bequerien" za'k maar zeggen, en uiteindelijk flexibeler ook.
edit:

offtopic:
ook je topictitel even aangepast

[ Voor 8% gewijzigd door drm op 09-12-2002 18:36 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • _DeWie_
  • Registratie: November 2001
  • Laatst online: 10-04 16:23
Die methode doe ik normaal ook, maar ik wou is kijken of ik van al die extra tabllen af kan komen.
Volgens mij moet het zo ook kunnen alleen kan ik niet echt vinden hoe.

Voordeel van deze opzet is dat het erg veel tabellen scheelt.
Namenlijk altijd een voor de usergroups en een voor een autorisatie.

Voor elke andere soort autorisatie moet ik namenlijk ook een extra autorisatie tabel maken

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Je moet niet bang zijn voor veel tabellen. Da's een slechte gewoonte, want je gaat compromissen sluiten met slechte oplossingen. Neem nou maar van mij aan dat 't veel beter en handiger is om wat meer tabellen te hebben, dan met een brakke oplossing aan te komen.

Er is geen enkele reden om niet een extra tabel te doen, behalve dat jij 't vervelend vindt om meerdere tabellen te hebben, en da's eigenlijk geen reden :Y)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • _DeWie_
  • Registratie: November 2001
  • Laatst online: 10-04 16:23
gaat nu om het principe :)
Ik wil dat het werkt.

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

het principe is brak. En 't spijt me wel, maar ik ga je niet helpen met een brak principe.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • _DeWie_
  • Registratie: November 2001
  • Laatst online: 10-04 16:23
Als je het op de een of andere manier kan query'n is het helemaal niet brak.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

_DeWie_ schreef op 09 December 2002 @ 19:02:
Als je het op de een of andere manier kan query'n is het helemaal niet brak.

Hehehe :)

Grapjas.
tabel users:
naam varchar
emailadres varchar primary key
rechten text

met als inhoud:
"ACM", "acm at tweakers.net", "mag overal topics openen, mag overal berichten plaatsen, mag mensen bannen, mag overal berichten verwijderen, ......"
"drm", "drm at tweakers.net", "mag overal topics openen (behalve in fora waar ie niet in mag), mag overal berichten plaatsen zolang het in P&W is, mag geen mensen bannen, mag overal in P&W berichten verwijderen"

etc
Das ook te querien hoor ;)
Is het principe dan helemaal niet brak?


Btw, mocht je binaire vergelijkingen moeten doen, er is wel wat aan voorbeelden over te vinden, denk dat je met de termen 'binair, rechten, dusty' aardig ver komt in bijv de omega-search-engine

[ Voor 12% gewijzigd door ACM op 09-12-2002 19:12 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
Als je het met die 'binaire methode' zult aanpakken, hoe zit het dan met onderhoudbaarheid?
Hoe ga je het aanpakken als er plotseling een bepaalde rule oid bijkomt?

Hoe zit het dan met je documentatie? Hoe ga jij na 6 maanden nog weten welke bit er nu weer moest gezet worden om recht X toe te kennen?

https://fgheysels.github.io/


  • _DeWie_
  • Registratie: November 2001
  • Laatst online: 10-04 16:23
Zal even een voorbeeld geven :

tabel user :
------------------------------
id | naam | groups
------------------------------
1 dewie | 11


tabel groups :
-------------------------------
id | naam | bit
------------------------------
1 | groep 1 | 1
2 | groep 2 | 2
3 | groep 3 | 4
4 | groep 4 | 8


tabel projecten :
------------------------------------
id | naam | groups
------------------------------------
1 | project 1 | 6
2 | project 2 | 4


Gebruiker dewie= lid van de groepen binair 1011 dus groep 1 + 2 + 4
Nu wil ik de projecten listen waar deze gebruiker lid van is

Stel ik wil nu een andere autorisatie hieraan hangen nb deletegroup hoef ik alleen maar een veld toe te voegen.

Gaat er niet om of het de beste manier is, maar of het werkbaar is
There is more than one way to do it

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
_DeWie_ schreef op 09 December 2002 @ 20:05:
Gaat er niet om of het de beste manier is, maar of het werkbaar is
There is more than one way to do it


Nou, in real life gaat het er niet om of het 'werkbaar' is, maar of het de beste werkbare manier is.

Ik vind jouw voorbeeld alleszins niet echt leesbaar en zeker niet onderhoudbaar. Als je het met meerdere tabellen doet, kan je een nieuwe groep, een nieuwe rule oid toevoegen zonder dat je een nieuw veld moet bijvoegen. Je hoeft dan enkel een nieuw record toe te voegen.

En hoe ga jij bv. op een makkelijke manier een lijst krijgen van alle users die in groep 1 zitten en niet in groep 2?

https://fgheysels.github.io/

Pagina: 1