2017-10-26 6 views
0

私のCakePHPアプリケーションでは、管理者が管理者用に定義されたアクションだけにアクセスできるようにURL検証を適用しました。 私のアプリケーションでは、 "surveylist"はadminのアクションであり、ユーザーがそのアクション(surveylist)に直接アクセスすると、URL検証が機能します(Unauthorized access msgが表示されます)。 しかし、そのメッセージの下で、surveylistのctpファイルは強制的に実行され、エラーを表示します。これは、try-catchブロックを介してURLを検証し、アクションの設定変数を取得できないためです。 不正なエラーが発生した場合、そのctpファイルを実行しないでください。cakephp 2.xでctpファイルの実行を停止する方法

surveylistのための私のコードは次のとおりです。 -

public function surveylist($pg=null){ 
    try{ 
     if($this->checkPageAccess($this->params['controller'] . '/' . $this->params['action'])){ 
      $this->Paginator->settings = array(
              'Survey' => array(
                 'limit' => 5, 
                 'order' => 'created desc', 
                 'conditions'=>array('is_deleted'=> 0), 
                'page' => $pg 
                 ) 
             ); 
      $numbers = $this->Paginator->paginate('Survey'); 
      $this->set(compact('numbers')); 
     }else{ 
     $this->Flash->set(__('Unauthorised access')); 

     } 
    }catch(Exception $e){ 
    $this->Flash->set(__($e->getMessage())); 
} 

}

コントロールが他に来る場合、私は実行するsurveylistのCTPファイルを望んでいません。 Plz、助けてください...... Thanx in advance ...

答えて

0

プレフィックスを使用して管理者とユーザーを分けているとします。そうしないと、方法を処理したり制限したりすることができません。

これを実行した後、どのプレフィックス(admin、user)が現在アクティブであるかを確認し、そのAuthコンポーネントを読み込み、Authのallow()メソッドでアクションを許可する条件を設定する必要があります。

例:あなたが特定の役割のためのアクションを制限することができ

$this->loadComponent('Auth',[ 
    /*'authorize' => [ 
     'Acl.Actions' => ['actionPath' => 'controllers/'] 
    ],*/ 
    'loginRedirect' => [ 
     'controller' => 'Users', 
     'action'  => 'index' 
    ], 
    'authenticate' => [ 
     'Form' => [ 
      'fields' => [ 
       'username' => 'email', 
       'password' => 'password' 
      ] 
     ] 
    ], 
    'loginAction' => [ 
     'controller' => 'Users', 
     'action' => 'login' 
    ], 
    'unauthorizedRedirect' => [ 
     'controller' => 'Users', 
     'action' => 'login', 
     'prefix' => false 
    ], 
    'authError' => 'You are not authorized to access that location.', 
]); 

if ($this->request->params['prefix']=='admin') { 
    // Put actions you want to access to admin in allow method's array 
    $this->Auth->allow(array('add', 'edit', etc...)); 
} else if ($this->request->params['prefix']=='user') { 
    // Put actions you want to access to user in allow method's array 
    $this->Auth->allow(array('login', 'view', etc...)); 
} 

この方法です。

希望すると便利です。

+0

thanx alot sir .... –

関連する問題