sql >> Database >  >> RDS >> Mysql

Hoe kan ik forumrechten implementeren?

Een machtigingsbitmasker wordt het best begrepen als het wordt weergegeven als binair, waarbij elk cijfer een machtiging vertegenwoordigt die aan of uit staat. Dus als machtigingen X, Y en Z bestaan, en ik heb alleen toegang tot X en Z, 101 zou betekenen dat ik de eerste en derde toestemming heb, maar niet de tweede. Het binaire getal 101 is gelijk aan het decimale getal 5 , dus dat is wat uiteindelijk in de database zou worden opgeslagen. Een enkel, klein geheel getal is een veel efficiënter object om op te slaan dan een string of meerdere kleine gehele getallen.

BEWERKEN: Ik realiseerde me hoe gemakkelijk het was om bestaande conversiefuncties te gebruiken om een ​​vrij snelle implementatie op gang te brengen. Hier is een voorbeeld.

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

Je krijgt misschien betere prestaties als je loops gebruikt, in plaats van terug te trekken van en naar snaren, maar dit illustreert het principe vrij duidelijk.



  1. Perl DBI versnellen fetchrow_hashref

  2. Postgresql vs. MySQL:hoe verhouden hun gegevensomvang zich tot elkaar?

  3. Dynamisch draaipunt MySQL

  4. Som met SQL server RollUP - maar alleen laatste samenvatting?