我试图检查我的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
}
我已将这三个条件与OR(||)放在一起但它失败了。
我想说的是:
$SESSION['roles']
数组中的值)$requester
应与$_SESSION['tnumber']
然后他应该留言说他不被允许。
否则(如果他有管理员权限或管理权限,或者他是请求者),那么它应该有效。
如何更改条件以满足此要求?
谢谢, 此致!
答案 0 :(得分:3)
在类似if (p || q || r)
的条件下,如果三个条件中的至少一个是if
,则整个true
语句的结果为true
。如果您没有管理角色,则!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
}
如果将大条件提取到单独的函数中,它还将有助于代码的可读性。
答案 1 :(得分:0)
好像你倒退了,你需要
if(!$admin && !$management && ...){
echo 'Not allowed';
}
或者你可以
if($admin || $management || ...){
echo 'Allowed';
}