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'.
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?
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'.
- 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.