[PHP5] Mit Flags arbeiten.
-
Hi,
ich habe folgenden artikel gefunden:
Als ich den gelesen habe, dachte ich: "Hey, das ist doch gar nciht mal so unpraktisch? Damit kann man sicherlich doch einiges in PHP reißen - z. B. Rechtevergabe!".
Gesagt getan, doch irgendwann wird PHP5 sehr ungenau. Hier mal ein Beispiel:
<? define ('FLAG_ONE', 1 << 0); define ('FLAG_TWO', 1 << 1); define ('FLAG_THREE', 1 << 50); // 50 = 1125899906842624 echo (constant ('FLAG_THREE')); ?>
Laut meinem Kenntnissen müsste 1 << 50 das äquivalent zu 2^50, also 1125899906842624 sein. Doch ich bekomme als Ausgabe nur 262144. Gebe ich anstatt 50 eine 20 an, bekomme ich den Wert 1048576. Dabei kann das doch kein größerer Wert sein?!
Warum wird PHP5 da so ungenau? Wenn ich mir überlege bis zu (oder sogar über) 75 Einstellungsmöglichkeiten für Benutzerrechte habe, was dann das letzte Flag ein 1 << 75 wäre ist das schon einiges, aber PHP spielt da nicht mit.
Dabei fänd ich Flags für Rechteverwaltung recht geil, da man so nicht die Datenbanktabelle anpassen muss, falls neue Rechte hinzu kommen oder entfernt werden, da alles über ein Numeric-Field gesteuert wird und ich es mit AND-Verknüpfung prüfen könnte.
Gibt es für Flags in hohen Bereichen eine Art "Workaround"?.
Danke euch im voraus.
-
Was wäre, wenn ein überlauf passieren würde, weil die Grenze sagen wir bei 2^32 liegt? Das Ergebnis wäre 2^18 also kleiner 2^20.
Ich würde mir überlegen, ob Du wirklich 50 Flags an einer Stelle brauchst...
-
~Airdamn schrieb:
Ich würde mir überlegen, ob Du wirklich 50 Flags an einer Stelle brauchst...
Ich möchte halt eine möglichst flexible Rechteverwaltung und nicht bei jedem Patch die Datenbank anpassen usw. Und da es sich um ein recht aufwändiges Programm mit vielen Modulen handelt, ist da eine flexible Rechteverwaltung das A und O.
Aber kennst Du evtl. etwas besseres als Flags für sowas?
Danke im voraus
-
relationstabellen ?
dann sind rechte durch datenrelationen und nicht durch datenstruktur abgebildet
-
r0nny schrieb:
relationstabellen ?
dann sind rechte durch datenrelationen und nicht durch datenstruktur abgebildetHmn daran dachte ich auch schon, aber das gefällt mir nicht so sonderlich, oder du meinst etwas anderes als ich ^^
-
Wenn Du GMP benutzt, dann kannst Du mit ganz großen Zahlen hantieren, also auch viele Flags setzen...
-
~Airdamn schrieb:
Wenn Du GMP benutzt, dann kannst Du mit ganz großen Zahlen hantieren, also auch viele Flags setzen...
wtf is GMP?
-
GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating point numbers. There is no practical limit to the precision except the ones implied by the available memory in the machine GMP runs on. GMP has a rich set of functions, and the functions have a regular interface.
-
Wie sähe das denn mit Relationstabellen aus? Das mit den Flags ist zwar sehr attraktiv (da ich auch recht viele Rechte zu verwalten habe), aber da ich kein GMP benutzen kann, suche ich nach einem anderen Weg.
Hat wer ein kleines Beispiel für die Rechteverwaltung über Relationstabellen?
Danke im voraus
-
hier mal als daten:
users = { 1: 'hans', 2: 'heinrich', } dokumente = { 1: 'a.txt', 2: 'b.txt, } nix = 0 lesen = 1 schreiben = 2 rechte_aendern = 3 rechte = [ # (benutzer id, dokument id, recht (1, 1, nix), (1, 2, schreiben), (2, 1, lesen), (2, 2, schreiben), (2, 2, rechte_aendern), ]
wenn das ganze auf dem sql server ist, kannst du dann recht einfach fragen welches recht welcher user für welches dokument hat
außerdem könntest du mittels join gleich das recht des aktuellen users am aktuellen dokument an die abgefragten daten anhängen
-
öhme, ich bastle aber mit MySQL? Fehlt da nicht ne "Verknüpfungstabelle"?
-
das in `rechte` sind die daten die du in die verknüpfungstabelle packen würdest
-
r0nny schrieb:
das in `rechte` sind die daten die du in die verknüpfungstabelle packen würdest
hä?