PHP 多个 OR 在 if 条件下

oli*_*erg 1 php if-statement conditional-statements

如果我的用户具有执行操作的必要权限,但我的条件不起作用,我正在尝试检查我的 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
}
Run Code Online (Sandbox Code Playgroud)

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

我想说的是:

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

然后他应该有一条消息说他不被允许。

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

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

感谢和问候!

Bar*_*ada 5

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

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

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

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