質問
これを何度か試みましたが、うまくいきませんでした。読んだあと この郵便受け, 、またやってみたいと思った。それでは、なぜ次が機能しないのか誰か教えてもらえますか?
<?php
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if( $user == ($editor | $admin) ) {
echo "Test";
}
?>
解決
ビットを設定するにはビットごとの OR 演算子 (|) を使用し、ビットをチェックするには AND 演算子 (&) を使用します。コードは次のようになります。
<?php
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if( $user & ($editor | $admin) ) {
echo "Test";
}
?>
バイナリとビット演算子の正確な動作を理解していない場合は、学習する必要があります。これをより良く行う方法がわかるでしょう。
他のヒント
PHP を使用するのは久しぶりですが、これはうまくいくと思います。
<?php
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if( ($user == $editor) || ($user == $admin) ) {
echo "Test";
}
?>
私はこれをエラー報告に使用しましたが、非常にうまく機能しました。ユーザー権限に関しては、これは非常にうまく機能するはずです。データベース内にユーザー権限ごとに複数の列を含めることも、データベース内に 1 つのユーザーレベル列を含めることもできます。このオプションを選択してください。
(2 | 4) は 6 と評価されますが、2 == 6 は false です。
@mk:(2 | 4) は 6 と評価されます。
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if (user == $editor || $user == $admin) {
echo "Test";
}
素晴らしいですね、これは CMS で権限を与える最良の方法のようです。はい?いいえ?
たぶん、私は実際にそのようにやったことがありません。私がやったのは、ビットごとの演算子を使用して、データベースの単一列の単一の数値に大量の「はいまたはいいえ」設定を保存することです。
アクセス許可については、データベースにアクセス許可を保存したい場合は、この方法がうまく機能すると思います。誰かがコンテンツを投稿し、管理者と編集者のみに見てもらいたい場合は、次の結果を保存するだけです。
($editor | $admin)
データベースにインポートしてから、それを確認するには、次のようなことを実行します
if ($user & $database_row['permissions']) {
// display content
} else {
// display permissions error
}
私の意見では、これはうまくスケールできません。実際に大規模なプロジェクトで使ってみたことはありませんが、CMS を使用するのは非常に複雑そうです。
それは常にあなたが何を必要としているかによって決まります。Zend Framework をすでに知っている場合は、以前に作成された Zend_Acl/_Auth の提案を次にお勧めします。ただし、すべてのフレームワークには同様のコンポーネントが付属していることに注意してください。
他に思い浮かぶのは、 ライブユーザー. 。私もそれを扱うのがとても好きです。
ほとんど何でもできると思います。このアプローチは非常にシンプルに見えますが、(すべての if() を介して) アプリケーションの真ん中に多くの ACL ロジックを配置することになるため、制限もあります。これは、シンプルかつ拡張性を維持するために行うべき最善のことではありません。;)