2016-11-04 121 views
1

我试图检查我的PHP代码,如果我的用户有必要的权利来执行一个操作,但我的条件不会工作。我可能误解了AND/OR。我可否需要你的帮助?PHP多个或在if条件

其实,我有:

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. 如果用户没有(在$SESSION['roles']数组中值),“管理员”或“管理”权限
  2. 或者,如果用户不是请求者($requester应该是相同的$_SESSION['tnumber']

那么他应该有一个消息,说他是不允许的。

行吟rwise(如果他有ADMIN权限,或管理权限,或者他是请求者),那么它应该工作。

如何更改我的条件以满足此要求?

谢谢, 关心!

+0

你为什么不只是让两个嵌套的if语句出来的吗? – hmrc87

+0

尝试使用echo $ _SESSION ['roles']和$ _SESSION ['tnumber']和$ requester找出你正在得到的值 – coder

回答

3

在像if (p || q || r)这样的条件下,如果三个条件中至少有一个是true,则整个if语句的计算结果为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 
} 

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

+0

谢谢,我会试试,这很有道理! – olivierg

0

好像你拥有它倒退,你需要

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

或者你可以有

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

确实与&&它似乎也在工作,谢谢! – olivierg