在PHP中实现权限

时间:2020-03-05 18:40:56  来源:igfitidea点击:

我已经尝试过几次,但是没有运气。阅读这篇文章后,它使我对再次进行此操作感兴趣。那么谁能告诉我以下原因为何不起作用?

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

?>

回答

使用按位"或者"运算符(|)设置位,使用"与"运算符(&)检查位。代码应如下所示:

<?php

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

    $user = $editor;

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

?>

如果我们不了解二进制文件以及位运算符的确切含义,则应该学习它。我们将了解如何更好地做到这一点。

回答

(2 | 4)的计算结果为6,但是2 == 6为假。

回答

@mk:(2 | 4)等于6.

回答

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

$user = $editor;

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

回答

Awesome, this seems like the best way to do permissions in a CMS. Yes? No?

也许,我从未真正那样做过。我所做的工作是使用按位运算符在数据库的单个列中的单个数字中存储一堆"是或者否"设置。

我想获得权限,如果我们要将权限存储在数据库中,这种方式会很好用。如果某人想要发布某些内容,而只希望管理员和编辑者看到它,则只需存储以下内容的结果:

($editor | $admin)

进入数据库,然后进行检查,例如

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

回答

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

回答

为了不浪费时间,为什么不看一下Zend ACL和Zend Auth之类的ACL /身份验证系统?两者都可以独立于Zend框架整体使用。访问控制是一个棘手的情况,因此至少要看看其他系统是如何做到的,这将使我们受益。

回答

它始终取决于需求。如果我们已经知道Zend框架,那么我会推荐第二个Zend_Acl / _Auth建议。但是请记住,每个框架都可能带有类似的组件。

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

我认为我们几乎可以做任何事情,尽管方法看起来非常简单,但它也受到限制,因为(通过所有这些if())我们将在应用程序中间放置很多ACL逻辑。要使它保持简单和可扩展性,这不是最重要的事情。 ;)

回答

我已经在错误报告中使用了它,并且效果很好。至于用户权限,它应该很好地工作,我们可以在数据库中为每个用户权限设置几列,或者在数据库中设置一个用户级列。选择此选项。