Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie kann ich Forumsrechte implementieren

Eine Berechtigungs-Bitmaske lässt sich am besten verstehen, wenn sie binär dargestellt wird, wobei jede Ziffer eine ein- oder ausgeschaltete Berechtigung darstellt. Wenn also die Berechtigungen X, Y und Z vorhanden sind und ich nur Zugriff auf X und Z habe, 101 würde darstellen, dass mir die erste und dritte Berechtigung gewährt wurden, aber nicht die zweite. Die Binärzahl 101 entspricht der Dezimalzahl 5 , das würde also in der Datenbank gespeichert werden. Eine einzelne kleine Ganzzahl ist ein viel effizienteres Objekt zum Speichern als ein String oder mehrere kleine Ganzzahlen.

BEARBEITEN: Mir wurde klar, wie einfach es war, vorhandene Konvertierungsfunktionen zu nutzen, um eine ziemlich schnelle Implementierung in Gang zu bringen. Hier ist ein Beispiel.

<?php
function bitmask_expand($n) {
  // 9 returns array(1, 0, 0, 1)
  return str_split(base_convert($n, 10, 2));
}

function bitmask_compact($a) {
  // array(1, 0, 0, 1) returns 9
  return (int) base_convert(implode($a), 2, 10);
}

$ns = range(0, 7);
foreach($ns as $n) {
  print_r($b = bitmask_expand($n));
  echo bitmask_compact($b), "\n\n";
}

Sie erzielen möglicherweise eine bessere Leistung, wenn Sie Schleifen verwenden, anstatt sich zu und von Zeichenfolgen zurückzuziehen, aber dies veranschaulicht das Prinzip ziemlich deutlich.