die rechte werden in einem integer gespeichert, der die bitsumme der einzelnen rechte darstellt. jedes recht ist darum eine potenz von 2.
in binärschreibweise ergibt sich der zusammenhang sehr anschaulich
der volle zugriff auf adminmod wird durch die rechte 131071 gewährt, was den ersten 17 bits enspricht
11111111111111111
man sieht, das alle diese rechte "wahr" sind.
wenn meinetwegen das recht 16384 (reserved nickname) nicht gegeben werden soll, wird das entsprechende bit entfernt. 16384 ist in binärschreibweise ein einzelnes bit, nämlich das fünfzehnte:
100000000000000
was im dezimalsystem 114687 entspricht
die resultierenden rechte sind in binär
11011111111111111
über bitoperatoren können rechte gesetzt, entfernt und geprüft werden.
(dieser syntax ist in PHP bis auf die variablendeklaration verwendbar)
Code:
unsigned int rechte;
rechte |= (1<<0); // Recht 1 setzen
rechte |= (1<<5); // Recht 6 setzen
rechte &= ~(1<<0); // Recht 1 wieder entfernen
if(rechte & (1<<0)) { // überprüfen, ob recht 1 gesetzt ist
// dies wird nicht ausgeführt
}
if(rechte & (1<<5)) { // überprüfen auf recht 6
// dies wird ausgeführt
}
die verwendeten bitoperatoren sind:
<<: left bit shift - verschiebt die bits des ersten operanden um die größe des zweiten operanden nach links. da hier nur 1 als erster operand benutzt wird, was einem einzelnen bit entspricht, wird im ergebnis auch jeweils nur ein bit gesetzt sein. dieser operator eigent sich also gut, die einzelnen rechte zu "erzeugen". zum einfacheren lesen können konstanten mit diesen werten verwendet werden.
|: Bitweises oder - im ergebnis sind alle bits gesetzt, die in einem der beiden operanden gesetzt sind
|=: dem ersten operanden werden alle bits des zweiten operanden hinzugefügt
&: Bitweises und - im ergebnis sind alle bits gesetzt, die in beiden operatoren gesetzt sind
&=: dem ersten operanden werden alle bits entfernt, die nicht im zweiten operanden auch gesetzt sind
~: bitweise negation - das ergebnis ist das 1-komplement des operanden, also die umkehrung aller bits (alle 1 werden zu 0 und umgekehrt)
das ist alles nicht ganz einfach zu verstehen wenn man sich das erste mal damit beschäftigt, ich hoffe aber ich konnte trotzdem helfen