Beste allemaal,
Voor een leuk stukje software waarbij per groep en eventueel per gebruiker rechten toegekend moeten worden heb ik een eenvoudig bitwise-rechten systeempje geschreven.
In de database heb ik de rechten opgeslagen;
En vervolgens controleer ik met een eenvoudig stukje code of iemand die rechten ook heeft;
Echter, de die-hard PHP'ers zien het al aankomen, loop ik nu tegen een limiet aan... Vanaf een bit als '2147483648', wat 'toevallig' mijn 32ste 'recht' is geworden loopt het hele gebeuren in het honderd doordat we nu aan het limiet van een 32bit integer zitten. Nu vind ik op internet een hoop op en aanmerkingen waarom dit probleem zich voordoet maar een oplossing zie ik daar niet tussen staan. Of ze zijn zo 'wiskundig' of 'technisch' dat ik er een klein beetje op vastloop.
Is hier een eenvoudige oplossing voor te verzinnen? Zou ik bovenstaande code bijv. in de database moeten uitvoeren (kan een database als MySQL met grotere getallen werken?) of zijn er mogelijk simpelere / nettere oplossingen te noemen? Juist het hele idee van één getal om de rechten toe te kunnen kennen aan een groep of gebruiker bevalt mij eigenlijk wel...
Voor een leuk stukje software waarbij per groep en eventueel per gebruiker rechten toegekend moeten worden heb ik een eenvoudig bitwise-rechten systeempje geschreven.
In de database heb ik de rechten opgeslagen;
ID | Recht | Bit |
1 | X lezen | 2 |
2 | X schrijven | 4 |
3 | X wijzigen | 8 |
4 | X verwijderen | 16 |
En vervolgens controleer ik met een eenvoudig stukje code of iemand die rechten ook heeft;
PHP:
1
2
3
4
5
6
| <?php if((int)$gebruiker['rechten'] & (int)$groep['rechten']) { //Woei } ?> |
Echter, de die-hard PHP'ers zien het al aankomen, loop ik nu tegen een limiet aan... Vanaf een bit als '2147483648', wat 'toevallig' mijn 32ste 'recht' is geworden loopt het hele gebeuren in het honderd doordat we nu aan het limiet van een 32bit integer zitten. Nu vind ik op internet een hoop op en aanmerkingen waarom dit probleem zich voordoet maar een oplossing zie ik daar niet tussen staan. Of ze zijn zo 'wiskundig' of 'technisch' dat ik er een klein beetje op vastloop.
Is hier een eenvoudige oplossing voor te verzinnen? Zou ik bovenstaande code bijv. in de database moeten uitvoeren (kan een database als MySQL met grotere getallen werken?) of zijn er mogelijk simpelere / nettere oplossingen te noemen? Juist het hele idee van één getal om de rechten toe te kunnen kennen aan een groep of gebruiker bevalt mij eigenlijk wel...