通常,在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()函数展示更好的方法,我想这种方式我重定向网络不是一个好方法。
答案 0 :(得分:1)
您正在寻找的是isAuthorized()函数:
public function isAuthorized($user){
if($user->activated){
return true;
}
return false;
}
将它放在AppController中,您也可以在其他控制器中覆盖它。如果存在,它将被自动调用。
进一步阅读:
https://book.cakephp.org/3.0/en/controllers/components/authentication.html#authorization