Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak mogę zaimplementować uprawnienia forum?

Maska bitowa uprawnień jest najlepiej rozumiana, gdy jest przedstawiana jako binarna, gdzie każda cyfra reprezentuje uprawnienie, które jest włączone lub wyłączone. Więc jeśli istnieją uprawnienia X, Y i Z, a mam dostęp tylko do X i Z, 101 oznaczałoby, że mam przyznane mi pierwsze i trzecie uprawnienie, ale nie drugie. Liczba binarna 101 jest odpowiednikiem liczby dziesiętnej 5 , więc to właśnie zostanie zapisane w bazie danych. Pojedyncza, mała liczba całkowita jest znacznie bardziej efektywnym obiektem do przechowywania niż łańcuch lub kilka małych liczb całkowitych.

EDYTUJ: Zdałem sobie sprawę, jak łatwo było wykorzystać istniejące funkcje konwersji, aby uruchomić dość szybką implementację. Oto próbka.

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

Możesz uzyskać lepszą wydajność, jeśli użyjesz pętli, zamiast cofać się do i od ciągów, ale to dość wyraźnie ilustruje zasadę.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql error 1364 Pole nie ma wartości domyślnych

  2. Połączenie z Db umiera po>4<24 w hibernacji wiosennego rozruchu jpa

  3. MySQL jak uzupełnić brakujące daty w zakresie?

  4. Selektywny import z CSV do MySQL

  5. MySQL w chmurze — zalety i wady Amazon RDS