[Delphi] Gebruikersrechten opslaan in database

Pagina: 1
Acties:

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 22:26

Tomatoman

Fulltime prutser

Topicstarter
Voor een van mijn projecten heb ik een applicatie gebouwd om het storingsmanagement uit te voeren en de facturering aan de storingsafhandeling te koppelen. In de client applicatie kunnen verschillende gebruikers inloggen. Op basis van hun logingegevens dient de server te bepalen welke rechten ze hebben. Zo mogen engineers bijvoorbeeld wel storingsrapporten aanleggen, maar kunnen ze niet bij de financiële gegevens. En de projectcontroller mag de storingsrapporten wel inzien, maar mag er niets in veranderen. (Als projectleider zijn mijn eigen rechten natuurlijk grenzeloos. :))

De programmeerstap die ik nu aan het uitvoeren ben is het implementeren van het rechtenmanagement op de server. Ik heb het volgende model in gedachten. Iedere gebruiker krijgt een bepaalde rol toebedeeld. Aan iedere rol is een bepaalde set rechten gekoppeld. Aan iedere gebruiker kunnen extra rechten worden toegekend of juist ingetrokken. Zo kan iemand de rol 'Engineer' hebben met als extra recht 'Andermans storingsrapportages aanpassen'.

:Z :Z :Z Een lange inleiding, maar nu mijn vraag. Hoe slaat de server per gebruiker de rechten op in de database? Ik neig er nu naar om in de tabel met alle rollen voor iedere rol een veld op te slaan met een bitmask van de toegestane rechten. En in de tabel met gebruikers slaat de server dan voor iedere gebruiker op:
- ID van de rol van de gebruiker;
- bitmask met extra rechten;
- bitmask met ingetrokken rechten.
Het bitmask met de resulterende rechten kan dan worden berekend met
[Resulterende rechten] = [Rechten van rol] or [Extra rechten] and not [Ingetrokken rechten]

Wat denken jullie van deze opzet? Is die een beetje logisch, of kan dit beter/ eenvoudiger/ logischer?

Een goede grap mag vrienden kosten.


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 18-08 22:57

Gerco

Professional Newbie

Of het het beste model is betwijfel ik, maar bij ons gaat het zo:

Een gebruiker heeft een of meerdere rollen, bijvoorbeeld "Manager", die rollen hebben allemaal een niveau, die persoon kan dus Manager op Afdelingsniveau zijn, daar hoort dan natuurlijk een afdelingsnummer bij...

De applicatie checkt bij een bewerking (bijvoorbeeld het openen van een storingsrapport in jouw voorbeeld) of die gebruiker de goede rol bezit en weigert anders toegang of staat alleen raadplegen toe.

De rollen zijn "hard" gedefinieerd, maw, het is niet mogelijk voor de gebruiker om aan te passen wat een bepaalde rol wel en niet kan. Iedere rol heeft dus ook een vaststaand ID, waarmee iedere functie kan gemakkelijk checken of een gebruiker rol ID x bezit.

Het is niet het meest flexibele systeem wat je kan bedenken, maar het werkt wel. Een mogelijke verbetering is het door de gebruiker laten definieren wat een rol kan en mag. dat is in ons systeem niet mogelijk.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15:12

alienfruit

the alien you never expected

Misschien zou je eens kunnen kijken naar het Lightweight Directory Access Protocol. Dit is volgens mij speciaal gemaakt voor het beheren informatie zoals gebruikersgegevens.