Gerd: Bitte ein Bit! ;-)

Beitrag lesen

hi,

Ich habe aber nun auch User, die mehrere Berechtigungen haben, z.B. (1 or 2).

Also läuft das auf eine Berechtigungsstufe von binär 11, bzw. dezimal 3 hinaus.

Die sollen nun alle Daten sehen, die entweder das 1er Bit ODER das 2er Bit haben.

Bei einer UND-Verknüpfung der beiden binären Werte soll also das zu prüfende Bit "stehen bleiben", d.h. im Ergebnis noch vorhanden sein.

datensatz1     1
1 AND 3 = 3

datensatz2     2
2 AND 3 = 2

datensatz3     3 (1 or 2)

3 AND 3 = 3

datensatz4     5 (1 or 4)
5 AND 3 = 1

datensatz5     7 (1 or 2 or 4)
7 AND 3 = 3

Für alle diese Beispiele wäre ein User mit Berechtigung 1 oder 2 also berechtigt.

Für einen Berechtigungslevel von 4 wäre er hingegen nicht berechtigt, denn 4 AND 3 = 0.

Alles korrekt.
Also ganz einfach ausgedrückt:

  • Wenn der User das 1er Bit hat, darf er alle Daten sehen, die das 1er-Bit auch haben.
  • Wenn der User das 2er Bit hat, darf er alle Daten sehen, die das 2er-Bit auch haben.
    ...

Aber wie drück ich das jetzt in der SQL-Query aus?

In der Variable berechtigung steht die Berechtigung des Users (dezimal), also z.B. berechtigung = 3

sql = "select * from tabelle1 where (projektrecht & " &berechtigung& ") = " &  [... da weiß ich nicht mehr weiter ...]

LG, Gerd