好的,所以我的站点设置如下。
索引重定向到"登录"页面,因为整个网站仅适用于登录用户。当用户试图查看他们无权访问的页面时,他们会被转储到登录页面,并显示"您无权访问该位置"消息。
我想改变这一点,这样,如果登录的用户试图访问未经验证的页面,他们就会被重定向回引用者页面。
在我的个人控制器中,我有一个isAuthorized方法,用于检查用户角色并允许或不允许访问。
class AppController extends Controller {
public $theme = 'Default';
public function beforeRender(){
$this->set('referer',$this->referer());
$this->set('userData', $this->Auth->user());
}
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'users',
'action' => 'login'
),
'logoutRedirect' => array(
'controller' => 'users',
'action' => 'login',
'home'
),
'authorize' => array('Controller')
)
);
public function isAuthorized($user) {
// Admin can access every action
if (isset($user['role']) && $user['role'] === 'admin') {
return true;
}
// Default deny
return false;
}
}
通过查看文档,我发现了未经授权的Redirect,并认为这可能能够做到,但我还没有找到实现它的方法。我尝试了一些方法,但还没有找到任何正常工作的方法。
您可以在auth组件中添加此行,将未经授权的用户重定向回他们来自的页面。
'unauthorizedRedirect' => $this->referer()
看起来像这样:
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'users',
'action' => 'login'
),
'logoutRedirect' => array(
'controller' => 'users',
'action' => 'login',
'home'
),
'authorize' => array('Controller'),
'unauthorizedRedirect' => $this->referer()
)
);
public function beforeRender(){
$user = READ USER SESSION
if(!$this->isAuthorized($user)){
WRITE REDIRECT CODE HERE
}
$this->set('referer',$this->referer());
$this->set('userData', $this->Auth->user());
}