Bitoperatoren

sh0x

Erfahrenes Mitglied
Hallo Freunde der leichten Unterhaltung,

ich bin mal wieder auf etwas gestoßen, was ich nicht ganz verstehe.
Es gibt sogenannte Bitoperatoren - habe auch schon das Tutorial hierzu gelesen - war übrigens sehr interessant.

Jetzt meine Frage: Wozu braucht man das überhaupt? Ich mein, auch wenn ich ein Rechtesystem schreiben möchte, dann ist es doch viel einfacher, Zahlen für jedes Recht festzulegen:
1 News schreiben
2 News bearbeiten
3 News löschen
4 Polls verfassen
5 Polls ändern
6 Polls löschen

Das kann man dann in eine Mysql-Datenbank schreiben und es würde funktionieren.
Wozu braucht man also die umständlichen Bitoperatoren? Läuft das Script dann schneller ab? Oder hat es andere Vorteile?

Ich habe hier gepostet, weil ich ein Javascript gesehen habe, was auf Bitoperatoren zugreift. Aber dieses Thema ist denke ich mal auch für andere Programmiersprachen von Bedeutung.

Grüße :)
 
Die Verwendung von Bits ist hier meist schneller und zudem Platzsparender

Beispielsweise benötigte ich für die Verwaltung von Markendaten 45 JaNein-Felder, die anzeigen, ob eine Marke zu der Klasse gehört oder nicht. Nun könnte ich natürlich in meiner Datenbank 45 Spalten erstellen.
Einfacher ist es aber mit der Bit-orientierten Darstellung (MySql bietet dafür SET-Datentypen an, das nur am Rande).
Du stellst Dir also eine Zahl mit 64 Bit vor, bei der die ersten 45 Bits jeweils anzeigen, ob die Marke zu der Klasse mit dem Bit n gehört oder nicht. Damit sparst Du erstens Platz und kannst zweitens auch sehr schnell aller Marken ermitteln, die z.b.
Für die Klassen 10,11,12, 24, 34 und 42 registriert sind, in dem Du mit Bitweiser Berechnung die enstprechende Zahl ermittelts.
Machst Du das mit mehreren Prüfungen ist das weder schnell noch platzsparend.

Hoffe meine kurze Ausführung hat es Dir ein bißchen verständlich gemacht, wozu so was gut sein kann.

vop
 
Um die Einfachheit mal an einem konkreten Beispiel zu zeigen:

Was machst du, wenn ein User bspw. News schreiben und Polls löschen darf.... da wirds schon komplizierter....und bei 6 "Einzelrechten" gibt es einen Haufen an Varianten.

Bei deiner Methode müsstest du jetzt schon zumindest mit Auflistungen arbeiten.
Bitweise geht das weitaus einfacher...und somit schneller.

Ich hab da mal was hochgeladen:-)
http://www.doktormolle.de/temp/user_perms.htm

du kannst dir damit alle möglichen Berechtigungen für einen User kombinieren.

Um dann zu ermitteln, ob ein User ein bestimmtes Recht hat, prüfst du unter Verwendung des AND-Operators die User-Berechtigung gegen das angeforderte Recht,z.B.:
Code:
userberechtigung=36;
polls_loeschen=32;

alert('Du darfst'+((userberechtigung & polls_loeschen)?' ':' keine ')+'Polls löschen');
 
Hast du das geschrieben? :)

Der Wahnsinn. Jetzt leuchtet mir der Nutzen ein. Wenn es viele Rechtekombinationen gibt, ist es wirklich besser, Bitoperatoren zu verwenden.

Nur ich schätze, ich muss noch etwas üben, um das auch effektiv einsetzen zu können. Ist ja kein Schulmädchen-Thema.

Aber, Sven, dass du da einfach mal so eine Seite hinbastelst, die die Rechte ausrechnet - das ist mehr als Service. Hut ab und danke!
 
Das ist doch nur nen bisschen Mathe:-(

Dass System kennst du ja vielleicht von UNIX-Dateiberechtigungen
1=ausführbar
2=schreibbar
4=lesbar
...und dann kombinieren:
3=ausführen/schreiben
5=ausführen/lesen
6=schreiben/lesen
7=alles


Die effektive Nutzung ist dabei garnicht kompliziert...ob das nur 3 oder 30 Berechtigungen sind, ist eigentlich egal.

Freut mich, dass es dir nützt:)
 

Neue Beiträge

Zurück