2016-11-04 122 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