Ich habe ein ACL-System zuvor von jemand anderem gebaut und ich versuche zu verstehen, wie Bit-Maskierung dort funktioniert. Ich habe diese vier Konstanten definiert:Wie übersetzt man von Dezimal zu Bitmaske?
const NONE = 0;
const READ = 1;
const WRITE = 2;
const UPDATE = 4;
const DELETE = 8;
Dann in DB I Benutzer wie 1 mit Berechtigungen sehen, 2, 5, 9, 15. Ich habe versucht, sie zu verwandeln this tool mit und ich mit diesem Ergebnis am Ende:
0 // NONE
1 // READ
2 // WRITE
3 // UPDATE|DELETE
4 // UPDATE
5 // WRITE|DELETE
6 // WRITE|UPDATE
7 // WRITE|UPDATE|DELETE
8 // DELETE
9 // READ|DELETE
10 // READ|UPDATE
11 // READ|UPDATE|DELETE
12 // READ|WRITE
13 // READ|WRITE|DELETE
14 // READ|WRITE|UPDATE
15 // READ|WRITE|DELETE|UPDATE
wie ich diese Arbeit denken, ist wie folgt:
Decimal Hexadecimal
3 00000011
da die beiden letzten Bits 1
sind ich gehe davon aus, dass die Benutzer mit 3
wird über UPDATE|DELETE
Berechtigungen verfügen (siehe Tabelle oben). Ist das richtig? Wenn nicht, was ist der richtige Weg, um von Dezimal zu Bitmaske zu übersetzen?
Es ist nur grundlegende Mathematik. Z.B. Du bekommst das niedrigste Bit mit Modulo 2 und verschiebst um ein Bit mit/2, also siehst du, welche Potenzen von 2 (Konstanten) gesetzt sind, bis du 0 erreichst. – maraca
@maraca Ich bin mir nicht sicher, dir zu folgen, ein Beispiel würde helfen – ReynierPM