sql >> Databasteknik >  >> RDS >> Mysql

Hur kan jag implementera forumprivilegier

En bitmask för behörigheter förstås bäst när den representeras som binär, där varje siffra som representerar en behörighet är på eller av. Så om behörigheterna X, Y och Z finns och jag bara har tillgång till X och Z, 101 skulle representera att jag har den första och tredje behörigheten som jag har fått, men inte den andra. Det binära talet 101 motsvarar decimaltalet 5 , så det är vad som skulle hamna lagrat i databasen. Ett enda litet heltal är ett mycket effektivare objekt att lagra än en sträng eller flera små heltal.

EDIT: Jag insåg hur enkelt det var att utnyttja befintliga konverteringsfunktioner för att få igång en ganska snabb implementering. Här är ett exempel.

<?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 kan få bättre prestanda om du använder loopar, snarare än att dra tillbaka till och från strängar, men detta illustrerar principen ganska tydligt.



  1. En rapports egenskaper

  2. Hur man installerar och konfigurerar phpMyAdmin på CentOS 6

  3. Vad är databasanvändarrättigheter?

  4. Byta namn på kolumner i en MySQL select-sats med R-paketet RJDBC