题
我曾多次尝试这样做,但没有成功。看完之后 这个帖子, ,这让我有兴趣再次这样做。那么谁能告诉我为什么以下不起作用?
<?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";
}
?>
如果您不了解二进制以及按位运算符的确切用途,您应该去学习它。您将了解如何更好地做到这一点。
其他提示
我已经很长时间没有使用 PHP 了,但我假设这会起作用:
<?php
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if( ($user == $editor) || ($user == $admin) ) {
echo "Test";
}
?>
我在错误报告中使用了它并且效果很好。至于用户权限,它应该工作得很好 - 您可以在数据库中为每个用户权限设置几列,或者在数据库中设置一个用户级别列。选择这个选项。
(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 逻辑。为了保持简单和可扩展性,这并不是最好的事情。;)