代码之家  ›  专栏  ›  技术社区  ›  Kevin

在PHP中实现权限

  •  8
  • Kevin  · 技术社区  · 16 年前

    我已经试过好几次了,但运气不好。读后 this post ,这让我有兴趣再做一次。那么有人能告诉我为什么下面的内容不起作用吗?

    <?php
    
    $guest = 1;
    $editor = 2;
    $admin = 4;
    
    $user = $editor;
    
    if( $user == ($editor | $admin) ) {
        echo "Test";    
    }
    
    ?>
    
    10 回复  |  直到 9 年前
        1
  •  11
  •   Paige Ruten    16 年前

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

    <?php
    
        $guest = 1;
        $editor = 2;
        $admin = 4;
    
        $user = $editor;
    
        if( $user & ($editor | $admin) ) {
            echo "Test";    
        }
    
    ?>
    

    如果你不理解二进制,也不知道位运算符是做什么的,你应该去学习它。你会明白如何做得更好。

        2
  •  6
  •   dragonmantank    16 年前

    为了不重新发明轮子,为什么不看一下acl/身份验证系统,比如 Zend ACL Zend Auth ?两者都可以独立于Zend框架整体使用。访问控制是一个棘手的情况,所以至少让我们看看其他系统是如何做到的。

        3
  •  2
  •   Espen Herseth Halvorsen    16 年前

    我用PHP已经很长时间了,但我认为这会起作用:

    <?php
    
        $guest = 1;
        $editor = 2;
        $admin = 4;
    
        $user = $editor;
    
        if( ($user == $editor) || ($user == $admin) ) {
            echo "Test";    
        }
    
    ?>
    
        4
  •  2
  •   Ross    16 年前

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

        5
  •  1
  •   mk.    16 年前

    (2 4)计算为6,但2==6为假。

        6
  •  1
  •   Paige Ruten    16 年前

    @mk:(2 4)计算为6。

        7
  •  1
  •   conmulligan    16 年前
    $guest = 1;
    $editor = 2;
    $admin = 4;
    
    $user = $editor;
    
    if (user == $editor || $user == $admin) {
        echo "Test";
    }
    
        8
  •  1
  •   Paige Ruten    16 年前

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

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

    我想对于权限来说,如果您想在数据库中存储权限,这种方法会很好地工作。如果有人想发布一些内容,只想让管理员和编辑看到它,那么您只需存储

     ($editor | $admin)
    

    进入数据库,然后检查它,执行如下操作

     if ($user & $database_row['permissions']) {
           // display content
     } else {
           // display permissions error
     }
    
        9
  •  0
  •   Espen Herseth Halvorsen    16 年前

    在我看来,这个比例不太合适。实际上我还没有尝试在大型项目中使用它,但是CMS听起来很复杂。

        10
  •  0
  •   Till    16 年前

    它总是取决于你需要什么。如果您已经知道Zend框架,那么我将给出前面提出的Zend_Acl/Auth建议。但请记住,每个框架都有一个相似的组件。

    另一件事是 LiveUser . 我也很喜欢和它一起工作。

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