CakePHP:在AppController中调用函数但不影响某些异常

时间:2017-05-31 08:30:28

标签: php cakephp

通常,在cakephp中有Auth组件来帮助用户登录,并且有功能Auth-> Allow()使访客用户仍然可以访问某些页面,如Index。但现在我想只有Activated帐户几乎可以访问网络的每个功能,但除了一些普通的页面,如索引,视图等。 我在Appcontroller中有一个功能

public function is_activated(){
    $userId = $this->Auth->user('id');
    $user = $this->Users->find('all', [
            'conditions' => ['id' => $userId],
            'fields' => ['id', 'email', 'activated']
        ])->first();
    $activated = $user->activated;
    if($activated !== 1){
            $this->Flash->error(__('Your account is not yet activated'));
            return $this->redirect('/users/activate');
    }
}

我在BeforeFilter中调用它以及在ProjectsController中使用Auth-> allow():

public function beforeFilter(Event $event) {
    parent::beforeFilter($event);
    $this->Auth->allow(['index', 'getMyProjects']);
    $this->is_activated();
}

但是这样,每个页面都会受到影响,并且Auth-> allow()不再起作用。任何人都可以为我的is_activated()函数展示更好的方法,我想这种方式我重定向网络不是一个好方法。

1 个答案:

答案 0 :(得分:1)

您正在寻找的是isAuthorized()函数:

public function isAuthorized($user){
    if($user->activated){
        return true;
    }
    return false;
}

将它放在AppController中,您也可以在其他控制器中覆盖它。如果存在,它将被自动调用。

进一步阅读:

https://book.cakephp.org/3.0/en/tutorials-and-examples/blog-auth-example/auth.html#authorization-who-s-allowed-to-access-what

https://book.cakephp.org/3.0/en/controllers/components/authentication.html#authorization