将未经授权的cakePHP用户重定向到referrer页面

时间:2014-09-11 11:56:42

标签: php cakephp

好的,所以我按照以下方式设置了我的网站。

索引重定向到“登录”页面,因为整个站点仅适用于登录用户。当用户尝试查看他们无权访问的页面时,会将这些页面转储到登录页面中,并显示“您无权访问该位置”消息。

我想更改此设置,以便登录用户尝试访问未经身份验证的页面时,会将其重定向回引荐页面。

在我的个人控制器中,我有一个isAuthorised方法,用于检查用户角色并允许或禁止访问。

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

查看文档,我发现了unauthorizedRedirect,并认为这可能会做到,但我还没有找到实现它的方法。我已经尝试了几件事,但还是找不到任何正常工作的东西。

2 个答案:

答案 0 :(得分:0)

您可以在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()
    )
);

答案 1 :(得分:-1)

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