Markus Schmitt: Bitmuster - mehr als ein Bit gesetzt?

Hallo Forum,

ich habe ein Rechtesystem mit Bitmasken umgesetzt (in ASP).

Ich möchte nun an einer Stelle nur überprüfen, ob ein Benutzer mehr als ein Recht hat, also ob im Bitmuster mehr als ein Bit gesetzt ist. Wieviele und welche Bits das dann sind, ist in diesem speziellen Fall egal.

Wie kann ich das abfragen?

Viele Grüße,
Markus Schmitt

  1. Hallo,

    Ich möchte nun an einer Stelle nur überprüfen, ob ein Benutzer mehr als ein Recht hat, also ob im Bitmuster mehr als ein Bit gesetzt ist. Wieviele und welche Bits das dann sind, ist in diesem speziellen Fall egal.

    ich würde das Bitmuster als Zahl interpretieren und gucken ob es ungleich 0 ist.

    gruss

    --
    no strict;
    no warnings;
    79.78 cups of Coffee (Brewed) + Me = Death
    Reklame ist die Kunst, auf den Kopf zu zielen und die Brieftasche zu treffen.
    1. Hi!

      Ich möchte nun an einer Stelle nur überprüfen, ob ein Benutzer mehr als ein Recht hat, also ob im Bitmuster mehr als ein Bit gesetzt ist. Wieviele und welche Bits das dann sind, ist in diesem speziellen Fall egal.

      ich würde das Bitmuster als Zahl interpretieren und gucken ob es ungleich 0 ist.

      Dann weiß ich doch nur, ob überhaupt ein Bit gesetzt ist, ich muss aber die Fälle unterscheiden können, ob nur ein Recht vorhanden ist, oder mehrere ...

      Es müsste sowas sein wie
      "bitzahl ist NICHT gleich 2 hoch n (wobei n = ganzzahlig)"
      oder?
      Aber wie schreibt man das in VBScript????

      Markus

      1. Hi,

        Dann weiß ich doch nur, ob überhaupt ein Bit gesetzt ist, ich muss aber die Fälle unterscheiden können, ob nur ein Recht vorhanden ist, oder mehrere ...

        oh das hatte ich falsch gelesen, ich dachte du wolltest nur prüfen ob der benutzer überhaupt ein recht besitzt.

        gruss

        --
        no strict;
        no warnings;
        79.78 cups of Coffee (Brewed) + Me = Death
        Reklame ist die Kunst, auf den Kopf zu zielen und die Brieftasche zu treffen.
      2. Hallo,

        Es müsste sowas sein wie
        "bitzahl ist NICHT gleich 2 hoch n (wobei n = ganzzahlig)"
        oder?
        Aber wie schreibt man das in VBScript????

        Dazu müsstest Du uns erst Mal zeigen, wie Deine Bitmuster aussehen und auch näher beschreiben, wie Du die Rechte dort abgelegt hast.

        viele Grüße

        Axel

        1. Hallo,

          Dazu müsstest Du uns erst Mal zeigen, wie Deine Bitmuster aussehen und auch näher beschreiben, wie Du die Rechte dort abgelegt hast.

          Bit   Recht
          --------------
          1     Recht1
          2     Recht2
          4     Recht3
          8     Recht4
          16    Recht5
          32    Recht6
          64    Recht7
          ...   ...

          Eigenschaft des Benutzers:
          rechte_var = 7
          --> Benutzer hat Recht1, Recht2 und Recht3

          1. Hallo!

            Bit   Recht

            1     Recht1
            2     Recht2
            4     Recht3
            8     Recht4
            16    Recht5
            32    Recht6
            64    Recht7
            ...   ...

            Hmmm. Um herauszufinden ob genau 1 Recht gesetzt ist, wirst du um eine mehrteilige IF Abfrage nicht herumkommen.

            if(RECHT==2^0 OR RECHT==2^1 OR RECHT==2^2 ..... RECHT==2^N)

            oder das ganze mit einer Schleife:
            n=Anzahl der möglichen Rechte
            For(i=0;i<n;i++)
               if(RECHT==2^i) => User hat genau ein Recht

            Eine Lösung mit einer einzigen Formel fällt mir da nicht ein.

            mfg
              frafu

          2. Hallo,

            Bit   Recht

            1     Recht1
            2     Recht2
            4     Recht3
            8     Recht4
            16    Recht5
            32    Recht6
            64    Recht7
            ...   ...

            Eigenschaft des Benutzers:
            rechte_var = 7
            --> Benutzer hat Recht1, Recht2 und Recht3

            recht = Array(1, 2, 4, 8, 16, 32, 64)

            rechte_var = 7

            anz_rechte = 0

            For i = 1 To 7
               If (rechte_var And recht(i-1)) <> 0 Then
                 MsgBox ("Nutzer hat Recht " & i)
                 anz_rechte = anz_rechte + 1
               End If
             Next

            msgbox("Nutzer hat " & anz_rechte & " Rechte.")

            viele Grüße

            Axel

      3. Hallo,

        Dann weiß ich doch nur, ob überhaupt ein Bit gesetzt ist, ich muss aber die Fälle unterscheiden können, ob nur ein Recht vorhanden ist, oder mehrere ...

        Es müsste sowas sein wie
        "bitzahl ist NICHT gleich 2 hoch n (wobei n = ganzzahlig)"
        oder?

        Wenn Du den Fall, dass die aus der Bitmap gebildete Zahl (ich nenne sie mal BERECHTIGUNGEN) größer 0 ist, shon vorher abgefangen hast, müsste folgende Berechnung

        log(BERECHTIGUNG)/log(2)

        eine Zahl ergeben, die nicht ganzzahlig ist.
        Die Basis des Logarithmus ist egal, es muss nur bei beiden die gleiche sein.

        So viel zu Theorie...

        Aber wie schreibt man das in VBScript????

        Da habe ich keinen blassen Schimmer ;-)

        Schönen Gruß aus Bilk

        Rainer

  2. Hallo!

    Ich möchte nun an einer Stelle nur überprüfen, ob ein Benutzer mehr als ein Recht hat, also ob im Bitmuster mehr als ein Bit gesetzt ist. Wieviele und welche Bits das dann sind, ist in diesem speziellen Fall egal.

    Hhhmmm... Kann es sein, dass immer nur dann ein Bit gesetzt ist, wenn die Zahl im Zehnersystem restlos durch 2 teilbar ist?

    mfg
      frafu

    1. Hallo!

      Hhhmmm... Kann es sein, dass immer nur dann ein Bit gesetzt ist, wenn die Zahl im Zehnersystem restlos durch 2 teilbar ist?

      Völliger Schwachsinn! Bitte gleich wieder vergessen!

      mfg
        frafu

      1. Hallo!

        Hhhmmm... Kann es sein, dass immer nur dann ein Bit gesetzt ist, wenn die Zahl im Zehnersystem restlos durch 2 teilbar ist?

        Völliger Schwachsinn! Bitte gleich wieder vergessen!

        ;-) Schon passiert.
        ... Äh, wer, wie, was sollte ich machen? Vergessen? Was?