0

CakePHP アプリに if ステートメントがありますが、期待どおりに動作しない理由がわかりません。

public function isAuthorized($user) {         
        if ($user['role'] === 'admin'){
            return true;
        }
        if ((in_array($this->action, array('view', 'index')))&&($user['role'] === 'senior' || 'junior')) {

          return true;
        }
        return false;
       }

「エージェント」ロールを持つユーザーがいる場合、すべてのアクションが拒否されると思います。

代わりにこれを使用すると、すべてがバラ色になります。ブール値をTrueに設定する前に両方の引数をチェックしないのはなぜですか?

public function isAuthorized($user) {
        if ($user['role'] === 'admin'){
            return true;
        }
        if ($user['role'] == 'agent'){
            return false;
        }
        if (in_array($this->action, array('edit', 'add', 'delete'))) {
            if ($user['role'] == 'senior' || 'junior') {
                return false;
            }

        }
        return true;
    }

何か案は?ありがとう

4

1 に答える 1

2

テストの 1 つが間違っていて、常に true と評価されます。

if($user['role'] === 'senior' || 'junior'){
  //will always be true 
}

ブール値として評価'junior'しているためです。これは PHP に当てはまります。

あなたの状態は次のとおりです。

if($user['role'] == 'senior' || $user['role'] == 'junior'){
  ...
}

次のように書くこともできます。

if(in_array($user['role'], array('senior', 'junior'))){

}
于 2012-11-23T23:28:37.197 に答える