2008-08-19 13 views
8

私は何度もこれを何度もやってみました。 this postを読んだ後、私はこれをやり直すことに興味を持ちました。誰も私に次のことがうまくいかない理由を教えてもらえますか?PHPでのパーミッションの実装

<?php 

$guest = 1; 
$editor = 2; 
$admin = 4; 

$user = $editor; 

if($user == ($editor | $admin)) { 
    echo "Test";  
} 

?> 

答えて

11

は、ビット単位のOR演算子を使用し|を(AND演算子を使用し、ビットを設定します() &)を使用してビットをチェックします。あなたのコードは次のようになります。

<?php 

    $guest = 1; 
    $editor = 2; 
    $admin = 4; 

    $user = $editor; 

    if($user & ($editor | $admin)) { 
     echo "Test";  
    } 

?> 

すると、バイナリ理解していないと、正確にビット演算子は何をすべきか、あなたはそれを学ぶに行く必要があります。あなたはこれをもっとうまくやる方法を理解するでしょう。

2

は、私がPHPを使用するので、長い時間がかかったが、私はこれが動作することを仮定します:

<?php 

    $guest = 1; 
    $editor = 2; 
    $admin = 4; 

    $user = $editor; 

    if(($user == $editor) || ($user == $admin)) { 
     echo "Test";  
    } 

?> 
1

(2 | 4)は6と評価されますが、2 == 6はfalseです。

1

@mk:(2 | 4)6.

1
$guest = 1; 
$editor = 2; 
$admin = 4; 

$user = $editor; 

if (user == $editor || $user == $admin) { 
    echo "Test"; 
} 
1

素晴らしいと評価され、これはCMSで権限を行うための最善の方法のように思えます。はい?いいえ?

多分、私は決してそれを実際に行ったことはありません。私が行ったことは、ビット単位の演算子を使用して、データベースの1つの列に1つの数値に "yesまたはno"の設定を保存することです。

データベースにアクセス許可を保存する場合は、この方法が有効です。誰かがいくつかのコンテンツを投稿したい、とだけ管理者や編集者がそれを見たい場合は、あなただけの、データベースに

($editor | $admin) 

の結果を格納するために、それをチェックするために、

if ($user & $database_row['permissions']) { 
     // display content 
} else { 
     // display permissions error 
} 
ような何かを持っています
0

私の意見では、これはうまく拡張できません。私は実際に大規模なプロジェクトでそれを使用しようとはしませんでしたが、CMSはこれを使うためには複雑に思えます。

6

車輪を再発明しないために、Zend ACLZend AuthのようなACL /認証システムを見てみてはいかがですか?どちらも、Zend Framework全体から独立して使用できます。アクセス制御は難しい状況なので、少なくとも他のシステムがどのようにそれを行うかを見ていくことで利益を得ます。

0

いつも必要なものによって異なります。既にZend Frameworkが分かっているなら、私はZend_Acl/_Authの提案を先に作成しています。しかし、すべてのフレームワークには同様のコンポーネントが付属していることに注意してください。

もう1つは、LiveUserです。私はそれと一緒にやっていくのが好きです。

私はあなたのアプローチが非常にシンプルに見えますが、かなりのことができると思うのですが、それは限られています(すべてのif()を通して)ACLの真ん中をあなたの申請。シンプルで拡張可能な状態に保つために行うべき最大のものではありません。 ;)

2

私はこれをエラー報告に使用しました。これはかなりうまく動作します。ユーザー権限については、データベースの各ユーザー権限またはデータベースのユーザーレベル列ごとに複数の列を持つことができます。このオプションを選択します。