私はこれを何度か試みましたが、うまくいきませんでした。この投稿を読んだ後、これをもう一度やりたいと思いました。では、なぜ次のことがうまくいかないのか誰か教えてもらえますか?
<?php
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if( $user == ($editor | $admin) ) {
echo "Test";
}
?>
私はこれを何度か試みましたが、うまくいきませんでした。この投稿を読んだ後、これをもう一度やりたいと思いました。では、なぜ次のことがうまくいかないのか誰か教えてもらえますか?
<?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
}
それは常にあなたが必要とするものに依存します。Zend Framework を既に知っている場合は、以前に作成された Zend_Acl/_Auth の提案を支持します。ただし、すべてのフレームワークにはおそらく同様のコンポーネントが付属していることに注意してください。
他に頭に浮かぶのはLiveUserです。私もそれを扱うのがとても好きです。
あなたはほとんど何でもできると思います。あなたのアプローチは非常に単純に見えますが、(これらすべての if() を介して) アプリケーションの真ん中に多くの ACL ロジックを配置することになるため、制限もあります。シンプルで拡張性を保つためには、これは最善の方法ではありません。;)
私の意見では、これはうまくスケーリングしません。私は実際に大規模なプロジェクトでそれを使用しようとしたことはありませんが、CMS でこれを使用するのは複雑に思えます。