8

我试过几次都没有运气。读完这篇文章后,它让我有兴趣再次这样做。那么谁能告诉我为什么以下不起作用?

<?php

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

$user = $editor;

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

?>
4

10 回答 10

11

使用按位 OR 运算符 (|) 设置位,使用 AND 运算符 (&) 检查位。您的代码应如下所示:

<?php

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

    $user = $editor;

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

?>

如果您不了解二进制以及位运算符的确切作用,则应该去学习它。您将了解如何更好地做到这一点。

于 2008-08-19T23:17:43.110 回答
6

为了不重新发明轮子,为什么不看看像Zend ACLZend Auth这样的 ACL/身份验证系统?两者都可以独立于 Zend 框架作为一个整体使用。访问控制是一个棘手的情况,因此至少看看其他系统如何做到这一点是有益的。

于 2008-08-20T02:39:00.863 回答
2

自从我使用 PHP 以来已经有很长时间了,但我会假设这会起作用:

<?php

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

    $user = $editor;

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

?>
于 2008-08-19T23:14:35.673 回答
2

我在错误报告中使用了它,它工作得很好。至于用户权限,它应该工作得很好——您可以为数据库中的每个用户权限或数据库中的一个用户级别列设置几列。选择这个选项。

于 2008-08-25T16:57:32.553 回答
1

(2 | 4) 评估为 6,但 2 == 6 为假。

于 2008-08-19T23:18:18.210 回答
1

@mk: (2 | 4) 评估为 6。

于 2008-08-19T23:24:22.483 回答
1
$guest = 1;
$editor = 2;
$admin = 4;

$user = $editor;

if (user == $editor || $user == $admin) {
    echo "Test";
}
于 2008-08-19T23:26:13.570 回答
1

太棒了,这似乎是在 CMS 中执行权限的最佳方式。是的?不?

也许,我从来没有真正这样做过。我所做的是使用按位运算符将一大堆“是或否”设置存储在数据库中单个列中的单个数字中。

我猜对于权限,如果您想在数据库中存储权限,这种方式会很好用。如果有人想发布一些内容,并且只想让管理员和编辑看到它,你只需要存储结果

 ($editor | $admin)

进入数据库,然后检查它,做类似的事情

 if ($user & $database_row['permissions']) {
       // display content
 } else {
       // display permissions error
 }
于 2008-08-19T23:39:48.280 回答
0

在我看来,这不能很好地扩展。我实际上并没有尝试在大型项目中使用它,但是 CMS 听起来很复杂。

于 2008-08-19T23:42:09.353 回答
0

它总是取决于你需要什么。如果您已经了解 Zend 框架,那么我会支持之前提出的 Zend_Acl/_Auth 建议。但请记住,每个框架都可能带有类似的组件。

想到的另一件事是LiveUser。我也很喜欢使用它。

我认为您几乎可以做任何事情,虽然您的方法看起来很简单,但它也受到限制,因为(通过所有那些 if())您将在应用程序中间放置大量 ACL 逻辑。为了保持简单和可扩展,这不是最好的事情。;)

于 2008-08-25T16:52:11.630 回答