sql >> Database teknologi >  >> RDS >> Mysql

Hvordan kan jeg implementere forumprivilegier

En tilladelsesbitmaske forstås bedst, når den repræsenteres som binær, hvor hvert ciffer repræsenterer en tilladelse er slået til eller fra. Så hvis tilladelserne X, Y og Z eksisterer, og jeg kun har adgang til X og Z, 101 ville repræsentere, at jeg har den første og tredje tilladelse givet til mig, men ikke den anden. Det binære tal 101 svarer til decimaltallet 5 , så det er det, der ville ende med at blive gemt i databasen. Et enkelt lille heltal er et meget mere effektivt objekt at gemme end en streng eller flere små heltal.

EDIT: Jeg indså, hvor nemt det var at udnytte eksisterende konverteringsfunktioner for at få en ret hurtig implementering i gang. Her er et eksempel.

<?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";
}

Du får måske bedre ydeevne, hvis du bruger loops i stedet for at trække tilbage til og fra strenge, men dette illustrerer princippet ret tydeligt.



  1. Plan Explorer 3.0 Webinar – eksempler og spørgsmål og svar

  2. Docker-compose:mysqld:Kan ikke oprette/skrive til filen '/var/lib/mysql/is_writable' (Fejlkode:13 - Tilladelse nægtet)

  3. Beregner tidsforskel i MySQL, men tager begivenheder i betragtning

  4. UTC_TIMESTAMP() Eksempler – MySQL