Bonjour à tous,
Je me trouve confronté à un problème que je n'arrive pas à résoudre. Mais je pense qu'il doit y avoir une règle mathématique pour le résoudre..
Dans une application informatique existante, un champ permet de stocker un entier qui correspond à l'addition de différentes puissances de 2 pour définir des permissions.
Ces permissions sont composées ainsi :
1 2 3 4 5 6 7 8 9 1 2 4 8 16 32 64 128 256
Par exemple si j'ai le droit 14789 j'ai dans mon champ la valeur : 1+ 8 + 64 + 128 + 256 = 457
1 2 3 4 5 6 7 8 9 1 2 4 8 16 32 64 128 256
La totalité des droits se représente donc ainsi 123456789, qui nous donne la valeur maximum : 1+2+4+8+16+32+64+128+256 = 511
Jusqu'ici tout va bien rien de sorcier, similaire aux droits sous unix.
Maintenant ce que je souhaite faire c'est modifier la valeur décimale de façon à retirer des droits précis.
Par exemple trés simplement si la totalité des droits sont activés, j'ai 511 et donc si je veux retirer les droits 4 et 5, c'est simple je fais 511 - (8 +16) = 487
Là où ça se complique c'est dans le cas où je me retrouve dans le premier exemple que j'ai donné plus haut (457).
En effet ici, si je veux enlever les droits 4 et 5, je ne peux évidemment pas faire 487 - (8+16), puisque le droit 4 est déjà actif. Comment faire donc en partant d'une valeur décimale pour retirer les droits avec les puissances de 2 correspondantes ?
Est-ce qu'il y aune factorisation à appliquer, où une autre règle mathématique à utiliser ?
Merci d'avance aux matheux pour votre aide et vos éclaircissements !
Partager