2017-02-23 1 views
0

나는 컨트롤러가 admin이고 다른 컨트롤러는 guest입니다. (A username으로 요청 본문에서 결정) 사용자가 admin (실제로 not-guest) 사용자가 다음 포트 요청을해야하는 경우Yii2 - 사용자 유형에 따라 컨트롤러에 요청을 포트

: 나는 test.com/guest/index 같은 고정 주소 일부 http 요청이,이 결과를 갖고 싶어 (리다이렉트는 API 클라이언트에서 리다이렉트가 불가능하기 때문에, 리다이렉트시에는 HTTP 요청이 캔슬 방식으로 움직이기 때문에) admin 컨트롤러의 특정 메소드로 이동한다.

내가 test.com/guest/indexPOST 요청을 보내고 그래서 그것을 실행해야 admin 오전 같은 methodName()-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

글쎄, 사용자가 로그인하는 것을 허용하지 않는다면 나는 admin 기능을 처리해야한다고 생각하지 않는다. 귀하의 양식에 사용자 정보도 전달할 수 있습니다. – Justinas

+0

실제로 사용자 이름과 비밀번호가 요청과 함께 전송됩니다. 나는 그것들을 검증해야하고 관리자라면 methodAdmin()을, 그렇지 않으면 methodGuest()를 수행해야한다. 그래서 각 요청에는 로그인이나 세션이나 쿠키 또는 다른 것들이 없어야합니다. 이 일을 할 수있는 방법이 있습니까? –

관련 문제