sql >> Databáze >  >> RDS >> Mysql

Jak mohu implementovat práva fóra

Bitová maska ​​oprávnění je nejlépe pochopitelná, když je reprezentována jako binární, přičemž každá číslice představující oprávnění je zapnutá nebo vypnutá. Pokud tedy existují oprávnění X, Y a Z a já mám přístup pouze k X a Z, 101 by znamenalo, že mám uděleno první a třetí oprávnění, ale ne druhé. Binární číslo 101 je ekvivalentní desetinnému číslu 5 , takže to je to, co by skončilo uloženo v databázi. Jediné malé celé číslo je mnohem efektivnější objekt pro uložení než řetězec nebo několik malých celých čísel.

UPRAVIT: Uvědomil jsem si, jak snadné bylo využít existující konverzní funkce k poměrně rychlé implementaci. Zde je ukázka.

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

Můžete dosáhnout lepšího výkonu, pokud budete používat smyčky, spíše než tahat zpět do a ze strun, ale to ilustruje princip docela jasně.



  1. Chyba Mysql 1236 z masteru při čtení dat z binárního protokolu

  2. Jak správně implementuji tento dotaz mySQL do souboru PHP a zobrazím výsledky?

  3. Výkon v PDO / PHP / MySQL:transakce versus přímé provádění

  4. Použití PIVOT v SQL Server 2008