将未经授权的cakeHP用户重定向到参考页面


Redirect unauthorised cakePHP users to referrer page

好的,所以我的站点设置如下。

索引重定向到"登录"页面,因为整个网站仅适用于登录用户。当用户试图查看他们无权访问的页面时,他们会被转储到登录页面,并显示"您无权访问该位置"消息。

我想改变这一点,这样,如果登录的用户试图访问未经验证的页面,他们就会被重定向回引用者页面。

在我的个人控制器中,我有一个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());
        }