【问题标题】:PHP multiple OR in if conditionPHP 多个 OR 在 if 条件下
【发布时间】:2017-03-18 00:09:39
【问题描述】:

如果我的用户具有执行操作的必要权限,但我的条件不起作用,我正在尝试签入我的 PHP 代码。我可能误解了 AND/OR。请问我需要你的帮助吗?

其实我有:

if ( !in_array('ADMIN',$_SESSION['roles']) || !in_array('MANAGEMENT',$_SESSION['roles']) || $requester != $_SESSION['tnumber'] ) {
                            echo "you are not allowed to XXXX !";
                    } else {
      // allowed
}

我已将这 3 个条件与 OR (||) 放在一起,但它失败了。

我想说的是:

  1. 如果用户没有“ADMIN”或“MANAGEMENT”权限($SESSION['roles'] 数组中的值)
  2. 或者如果用户不是请求者($requester应该与$_SESSION['tnumber']相同

那么他应该有一条消息说他不被允许。

否则(如果他有 ADMIN 权限或 MANAGEMENT 权限,或者他是请求者),那么它应该可以工作。

我怎样才能改变我的条件来满足这个要求?

谢谢, 问候!

【问题讨论】:

  • 你为什么不把它做成两个嵌套的 IF 语句呢?
  • 尝试使用 echo $_SESSION['roles'] 和 $_SESSION['tnumber'] 和 $requester 找出你得到的值

标签: php if-statement conditional-statements


【解决方案1】:

在像if (p || q || r) 这样的条件下,如果三个条件中至少有一个是true,则整个if 语句的计算结果为true。如果您没有 MANAGEMENT 角色,则 !in_array('MANAGEMENT',$_SESSION['roles']) 将是 true,因此访问将被拒绝。

我建议您反转 if 语句,如果为 true,则授予访问权限,否则拒绝访问。所以:

if (in_array('ADMIN', $_SESSION['roles']) || in_array('MANAGEMENT', $_SESSION['roles']) || $requester == $_SESSION['tnumber'] ) {
    // allowed
} else {
    // denied
}

如果您将大条件提取到单独的函数中,这也将有助于代码的可读性。

【讨论】:

    【解决方案2】:

    看来你倒退了,你需要

    if(!$admin && !$management && ...){
      echo 'Not allowed';
    }
    

    或者你可以有

    if($admin || $management || ...){
      echo 'Allowed';
    }
    

    【讨论】:

      猜你喜欢
      • 2017-01-27
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 2017-07-29
      相关资源
      最近更新 更多