Avatar billede Slettet bruger
18. januar 2005 - 16:33 Der er 5 kommentarer og
1 løsning

Bit Flags

Hej.

Jeg har engang konfigureret noget software eller lignende med noget som jeg nu har fundet ud af hedder bitflags.
Det handler om at man ud fra 1, 2, 4, 8, 16, 32, 64, 128 osv. giver en bruger et sikkerhedsniveau. Hvis en bruger skal have flere sikkerhedsniveauer kan man bare lægge tallene fra to sikkerhedsniveauer sammen. Det endelige tal gemmes så og derefter kan man beregne hvilke sikkerhedsniveauer brugeren har adgang til.

Jeg forstår godt hvordan dette fungerer, men ikke hvordan man regner tilbage. Derfor kunne jeg godt bruge et kodeeksempel. Derfor har jeg oprettet spørgsmålet i PHP.

På forhånd tak,
Philip
Avatar billede gammelhat Nybegynder
18. januar 2005 - 16:39 #1
Du bruger AND operatoren

if($niveau & 8)

if($niveau & 64)

...
Avatar billede jakoba Nybegynder
18. januar 2005 - 16:48 #2
hvis fx en bruger har fået sikkerhedsniveau 
$bruger = 64 + 8;          //  (72)
kan du fjene de 8 igen med
$bruger = $bruger & (128+64+32+16  +4+2+1);  // fjern bitten for 9 igen
og for at slippe for al det udregning kan du evt lave den store udregning først:
$bruger = $bruger & (255-8);        // gæt selv hvad der skal ændres for at fjerne level 16

noget andet er at når du tilføje nye bit er det farligt at bruge '+'. Hvad hvis du korret til at tilføje bit 8 2 gange, så bliver bit 16 sat.
Det er bedre at bruge bitvise or:
€bruger = $bruger | 8;          // ændrer ikke noget hvis 8 allerede er sat.
Avatar billede gammelhat Nybegynder
18. januar 2005 - 16:56 #3
når en bit skal fjernes, er det nok nemmere at bruge xor

$bruger ^= 8;
Avatar billede Slettet bruger
18. januar 2005 - 17:10 #4
Koden

<?php
$levels = array(
    256 => "notused",
    128 => "notused",
    64 => "notused",
    32 => "notused",
    16 => "notused",
    8 => "intranetbeskeder",
    4 => "useradmin",
    2 => "website",
    1 => "booking"
);

function levels ($l) {
    global $levels;
    foreach ($levels as $key => $val) {
        if ($key & $l) {
            echo $val."<br />";
        }
    }
}
$l = 256+8+4+2+1;
levels($l);
?>

Returnerer:

notused
intranetbeskeder
useradmin
website
booking


Fik hjælp over IRC, men hvis I bare smider et svar får I nogle points ;)
Avatar billede Slettet bruger
22. februar 2005 - 15:17 #5
Svarer I eller skal jeg tage pointsne selv?
Avatar billede Slettet bruger
22. august 2006 - 16:49 #6
:|
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester