2

页面控制器的访问规则:

public function accessRules()
{                   
    $isadmin = User::loadUser(Yii::app()->user->id)->adminUser;

    return array(
            array('allow', 
                    'actions'=>array('index','view','create','update'),
                    'expression'=>"{$isadmin}==1",
                    ),
          array('deny',  // deny all users
                'users'=>array('*'),
            ),          

    );
}

主要配置:

 'user' => array(         // Webuser for the admin area (admin)
        'class'             => 'WebUser',
        'allowAutoLogin' => true,
        'loginUrl'          => array('/user/login'),
        'stateKeyPrefix'    => 'admin_',
    ),

问题: 当我访问页面/创建时,它没有重定向到用户/登录但抛出异常:

Error 404

The requested page does not exist.

如何重定向到未经授权的用户的登录页面?

4

3 回答 3

2

您可以使用“deniedCallback”来执行此操作。

方法一

      'deniedCallback' => function() {Yii::app()->controller->redirect(array ('actionName'));},

      //It will come As

       array('allow',                
            'actions' => array('actionName1,actionName2,actionName3'),
            'deniedCallback' => function() {Yii::app()->controller->redirect(array ('actionName'));},
            'users' => array('@'),
        ),

方法2: 你也可以通过调用一个函数来做同样的事情,见下面的代码。

        array('allow',
            'deniedCallback' => array($this, 'goToLogin'),
            'actions' => array('actionName1,actionName2,actionName3'),
            'users' => array('@'),
        ),

goToLogin方法的代码

        public function goToLogin()
        {
             $this->redirect('/controller/actionName');
             //For your program 
             //$this->redirect('/site/login');
        }
于 2013-07-08T05:49:44.510 回答
1

Yii::app()->user->loginRequired();

于 2013-07-08T06:54:34.613 回答
0

在每个控制器中添加此功能。

public function beforeAction($action) {

if (Yii::app()->user->isGuest && Yii::app()->controller->action->id != "login") {
    Yii::app()->user->loginRequired();
}
//something code right here if user valid
return true;  
}

站点控制器只需要Yii::app()->controller->action->id != "login"这个条件。为其他控制器移除它

于 2016-09-14T13:08:59.977 回答