在PHP中实现权限

时间:2008-08-19 23:11:50

标签: php permissions

我试图这样做几次没有运气。阅读this post后,它让我有兴趣再次这样做。那么有谁能告诉我为什么以下不起作用?

<?php

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

$user = $editor;

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

?>

10 个答案:

答案 0 :(得分:11)

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

<?php

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

    $user = $editor;

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

?>

如果你不理解二进制文件以及按位运算符的确切内容,你应该去学习它。你会明白如何做得更好。

答案 1 :(得分:6)

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

答案 2 :(得分:2)

自从我使用PHP以来已经很长时间了,但我认为这样可行:

<?php

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

    $user = $editor;

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

?>

答案 3 :(得分:2)

我在错误报告中使用了它,它运行得很好。至于用户权限,它应该可以很好地工作 - 您可以为数据库中的每个用户权限或数据库中的一个userlevel列创建多个列。选择此选项。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

$user = $editor;

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

答案 7 :(得分:1)

  

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

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

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

 ($editor | $admin)

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

 if ($user & $database_row['permissions']) {
       // display content
 } else {
       // display permissions error
 }

答案 8 :(得分:0)

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

答案 9 :(得分:0)

这总取决于你需要什么。如果您已经知道了Zend Framework,那么我将介绍之前提出的Zend_Acl / _Auth建议。但请记住,每个框架都可以使用类似的组件。

我想到的另一件事是LiveUser。我也喜欢和它一起工作。

我认为你可以做很多事情,虽然你的方法看起来非常简单,但它也是有限的,因为(通过所有那些if())你会把很多ACL逻辑放在你的中间应用。为了保持简单和可扩展性,这不是最好的事情。 ;)