如何在验证url后停止执行cakephp 2.x中的ctp文件

时间:2017-10-26 07:54:39

标签: validation cakephp

在我的CakePHP应用程序中,我已应用Url验证,以便管理员只能访问为admin定义的操作和用户相同的操作。 在我的申请中," surveylist"是管理员的操作,当任何用户直接访问该操作(监控列表)时,URL验证工作(显示未授权的访问消息)。 但是在那个消息下面,监视列表的ctp文件强制执行并显示错误,因为我已通过try-catch块验证了URL,并且无法获取设置的操作变量。 如果出现unauthorize错误,我希望不能执行ctp文件。

我的监控记录代码是: -

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()));
}

}

如果控件进入其他地方,我不希望执行监控列表的ctp文件。 Plz,救救我...... Thanx提前...

1 个答案:

答案 0 :(得分: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...));
}

这样您就可以限制特定角色的操作。

希望这有帮助!