Der Martin: Funktion zur Addition von Rechten

Beitrag lesen

Hi,

Ich habe ein Array mit Gruppenrechten für eine bestimmte Funktion.
Die Gruppenrechte werden dabei, wie bei chmod, als Integer von 0-7 gespeichert.

Beispiel:

array(

[0] => array(
               'group_id' => 1,
               'rights'   => 3
           )
    [1] => array(
               'group_id' => 2,
               'rights'   => 4
           )
)


>   
> Ich suche jetzt eine Funktion mit der ich die Rechte addieren kann.  
  
nein, du willst sie nicht addieren, sondern bitweise überlagern. Das leistet die ODER-Verknüpfung.  
  

> Umgedreht hätte ich auch gern eine Funktion die mir die Integer in entsprechende Rechte umwandeln kann. Als Rückgabewert vielleicht ein Array in der Art:  
> ~~~php

array(  

>     'read'    => true,  
>     'write'   => false,  
>     'execute' => true  
> )

Oder als Rückgabewert:
if(checkRights(7, 'read') == true){ /* read... */}

Die Abfrage ist natürlich unsinnig - wenn deine (bis jetzt noch hypothetische) Funktion checkRights() sowieso true oder false liefert, ist es sinnlos, diesen Wert nochmal mit true zu vergleichen, nur um wieder denselben Wert zu bekommen. Stattdessen:

if(checkRights(7, 'read')) { /* read... */}

Mir fehlt nur leider eine konkrete Idee dazu wie ich das am besten umsetzen kann.

In dieser Richtung musst du die einzelnen Bits isolieren, also mit einer Maske UND-verknüpfen, beispielsweise:

if ($group[$i]['rights'] & 4)  // angenommen: 4=read, 2=write, 1=execute  
 { "read" permission set, do something  
 }

Ich habe mir überlegt, die Integer zu Binärzahlen umzuwandeln ...

Es gibt keine Integer- oder Binärzahlen. Das sind nur unterschiedliche Darstellungen desselben Zahlenwerts. Eine Umwandlung von einem ins andere ist dasselbe wie die Umwandlung von Kartoffeln in Erdäpfel.

So long,
 Martin

--
Wenn man keine Ahnung hat - einfach mal Fresse halten.
  (Dieter Nuhr, deutscher Kabarettist)
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(