1

アプリケーションでビット単位のアクセス許可を使用する方法を学習しようとしています。問題は、それが機能していないことです:(

ユーザーがログインすると、次のようにセッションにユーザー オブジェクトを保存します。

    [user] => User Object
    (
        [id] => 1
        [firstname] => Firstname
        [lastname] => Lastname
        [emailaddress] => email@adres
        [permissions] => 16
    )

私は認証と呼ばれるクラスを持っており、そこでいくつかの定数を定義しています。

class authenticate {   

const GUEST = 1;  // 1
const USER = 10;  // 2
const MODERATOR = 1000; // 8
const ADMIN = 10000; // 16

ユーザーが管理者にログインすると、ユーザーが管理者権限を持っていることを確認したいので、この方法で確認しようとします:

  if ($_SESSION['user']->permissions & authenticate::ADMIN){
             echo 'yep admin';
  }else {
             echo 'no admin';
  }

許可として8番を持っていると言うことができるユーザーがいる場合、それは管理者ではなく、管理者なしと言うべきです..

ここで私が間違っていることを誰かに教えてもらえますか?

ありがとう!

4

2 に答える 2

5

それはおそらく

const GUEST = 1;     // 1
const USER = 2;      // 10
const MODERATOR = 8; // 1000
const ADMIN = 16;    // 10000
于 2013-02-27T19:23:25.897 に答える
5

問題は、ミハイルが示すように、それ1000が 1000 という数であるということです。バイナリ表現が である数値が必要です1000。これは数値の 8 です。

ミハイルと同じように、、、、、、などを1使用でき2ます。4816

ただし、ビットごとの計算で何が起こっているかを視覚化したい場合は、ビットがどこにあるかを視覚的に確認できると便利です。PHP 5.4 では、バイナリ整数構文が導入されました。

const GUEST     = 0b00001;  // 1
const USER      = 0b00010;  // 2
const MODERATOR = 0b01000;  // 8
const ADMIN     = 0b10000;  // 16
于 2013-02-27T19:30:08.630 に答える