2017-02-23 16 views
0

コントローラーはadmin、もう1つはguestです。 (usernameとしてリクエストボディに決定)、ユーザはadmin(実際not-guest)ユーザーは、それがポートの要求をすべきである場合Yii2 - ユーザーの種類に基づいてコントローラーに要求を移植します。

: 私はtest.com/guest/indexのような静的アドレスにいくつかのhttpの要求を持っており、この結果を持っていたいです(リダイレクトはapi-clientでリダイレクトできないので、もちろんHTTPリクエストはリダイレクトのメソッドに沿って動かないので)adminコントローラの特定のメソッドに移動します。

私はtest.com/guest/indexPOSTリクエストを送信し、私はそれがmethodName()を実行する必要がありますadmin午前のように - 私は名前ではない要求を指定する必要があります - adminコントローラからとadminではない他の誰かがそれを実行する必要があり、同じリクエストを送信する場合methodName()(同じメソッド名)guestコントローラ。

どうすればいいですか?私はYii2を使用します。だから私はこれを行う方法があるかどうか、または方法がないので、別のメソッド名を持つ単一のコントローラで可能であることを知りたいですか? ACL拡張で が可能ですか? おかげ

答えて

1

私が送信された情報に基づいていないGuestControllerや処理要求をという名前の単一のコントローラを作成することをお勧めしますが、現在のユーザーのステータスに関する:

class GuestController extends yii\web\Controller { 
    public function actionIndex() { 
     $response = null; 

     $model = User::getByCredentials(); 

     if (!$model) { 
      $response = $this->guestAction(); 
     } else { 

      switch ($model->role) { 
      case 'admin': 
       $response = $this->adminAction(); 
       break; 
      case 'user': 
       $response = $this->someUserAction(); 
       break; 
      } 
     } 

     echo $response; 
    } 

    protected function adminAction() { 
     $data = \Yii::$app->request->post(); // still can access _POST/_GET... 

     return 'Hallo Warold!'; 
    } 

    /* ... */ 
} 

/** 
* 
*/ 
class User extends yii\web\ActiveRecord { 
    public funcion getByCredentials($username, $password) { 
     $model = self::findOne(['username' => $username]); 

     if (!empty($model) && \Yii::$app->security->validatePassword($password, $model->password)) { 
      return $model; 
     } 

     return null; 
    } 
} 
+0

おかげでこれは良いアプローチに見えるが、どのように私はすべき\ Yii :: $ app-> user-> roleの部分を設定しますか?リクエスト本体とユーザー名のみに基づくログイン機能がないため、どこで設定する必要がありますか? –

+0

あなたがログインできるようにしないと、管理機能の処理が行われていないと思います。あなたのフォームにユーザー名も渡すことができます。 – Justinas

+0

実際にユーザー名とパスワードが要求に沿って送信されます。私はそれらを検証し、管理者であればmethodAdmin()を実行し、そうでなければmethodGuest()を実行します。したがって、各リクエストではセッションやクッキーなど何もないログイン自体を行う必要があります。これを行う方法はありますか? –

関連する問題