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 (||) 放在一起,但它失败了。
我想说的是:
$SESSION['roles']数组中的值)$requester应该与$_SESSION['tnumber']然后他应该有一条消息说他不被允许。
否则(如果他有 ADMIN 权限,或 MANAGEMENT 权限,或者他是请求者),那么它应该可以工作。
我怎样才能改变我的条件来满足这个要求?
感谢和问候!
在类似条件中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)
如果您将大条件提取到单独的函数中,这也将有助于提高代码的可读性。