2016-11-04 6 views
1

私のユーザがアクションを実行するために必要な権利を持っているが、条件がうまく動作しない場合、PHPコードをチェックインしようとしています。私はおそらくAND/ORを誤解しているでしょう。私はあなたの助けをお願いします。PHPの複数のOR条件の場合

実は、私が持っている:

if (!in_array('ADMIN',$_SESSION['roles']) || !in_array('MANAGEMENT',$_SESSION['roles']) || $requester != $_SESSION['tnumber']) { 
          echo "you are not allowed to XXXX !"; 
        } else { 
     // allowed 
} 

私は論理和(||)でこれら3つの条件を入れてきましたが、それは失敗しています。

私が言いたいことはある:

  1. ユーザーが「ADMIN」または「管理者の権利($SESSION['roles']配列の値)
  2. を持っていない場合、またはユーザーが依頼者でない場合($requesterは、それから彼は彼が許可されていないというメッセージを持っている必要があり$_SESSION['tnumber']

と同じでなければなりません。

OTHE (もし彼がADMINの権利、または管理の権利を持っている、または彼が依頼者であるなら)うまくいくはずです。

この要求を満たすために私の状態を変更するにはどうすればよいですか?

ありがとう、 よろしく!

+0

を持つことができるようですか? – hmrc87

+0

echo $ _SESSION ['roles']と$ _SESSION ['tnumber']と$ requesterを使って、値を調べてみてください – coder

答えて

3

if (p || q || r)のような条件では、は3つの条件の少なくとも1つがtrueであればtrueと評価されます。 MANAGEMENTロールがない場合、!in_array('MANAGEMENT',$_SESSION['roles'])trueとなり、アクセスは拒否されます。

ifステートメントを逆にすることをお勧めします。そうであれば、アクセスが許可されます。それ以外の場合は拒否されます。 So:

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文、それのうち二つは、ネストされたことはありませんなぜ

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

確かに&&と一緒に働いているようですね、ありがとう! – olivierg

関連する問題