我曾多次尝试这样做,但没有成功。看完之后 这个帖子, ,这让我有兴趣再次这样做。那么谁能告诉我为什么以下不起作用?

<?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";    
    }

?>

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

其他提示

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

我已经很长时间没有使用 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 逻辑。为了保持简单和可扩展性,这并不是最好的事情。;)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top