1

我希望主页呈现取决于用户角色登录。

目前我在 protected/controllers/break;SiteController.php 中有这个,但它重定向到另一个页面。

protected function roleBasedHomePage() {
     $roles = Yii::app()->user->getState('roles'); //however you define your role, have the value output to this variable
    switch($role) {
        case 'admin':
            $this->redirect(Yii::app()->createUrl('site/page',array('view'=>$roles.'homepage')));
        break;
        case 'b':
            $this->redirect(Yii::app()->createUrl('site/page',array('view'=>$roles.'homepage')));
        break;
        case 'guest':
            $this->redirect(Yii::app()->createUrl('site/page',array('view'=>'homepage')));
        break;
        //etc..
    }

 public function actionLogin()
{

    $model = new LoginForm();

    if (isset($_POST['ajax']) && $_POST['ajax'] === 'login-form') {
        echo CActiveForm::validate($model, array('username', 'password', 'verify_code'));
        Yii::app()->end();
    }

    if (isset($_POST['LoginForm'])) {
        $model->attributes = $_POST['LoginForm'];
        if ($model->validate(array('username', 'password', 'verify_code')) && $model->login()) {
            Yii::app()->user->setFlash('success', 'Welcome ' . app()->user->name);
           // $this->redirect(Yii::app()->user->returnUrl);
           $this->roleBasedHomePage();
        }
    }

    $this->render('login', array('model' => $model));

}
}

如果我想重定向页面但我希望主页 url 相同并且内容根据“角色”而更改,则此方法有效。

例如,如果用户是“admin”,那么我想要呈现“adminhome”

我猜下面的功能与它有关吗?

 public function actionIndex()
{
    $this->render('index');


}
4

3 回答 3

2

你可以很容易地做到这一点。首先为每个角色创建一个视图。然后在登录后将每个人重定向到您的主页,但检查他们的角色并根据该角色“renderPartial()”查看该角色。喜欢:

switch($role){
   case 'admin' :
      $this->renderPartial('application.views.site._admin');    // view for admin
      break;
   case 'superUser':
      $this->renderPartial('application.views.site._superUser');// view for super user
      break;
于 2013-10-28T17:58:45.120 回答
0

如果您要更改的是页面内容但保持相同的页脚和页眉,我会使用 Ajax 作为选项。

例如:

1- 创建三个不同的视图,admin.php、b.php 和 guest.php。

2- 在您的控制器中创建三个不同的方法:renderAdmin()、renderB() 和 renderGuest()。每一个都会渲染相应的视图。

3- 在同一控制器中为特定角色和方法定义访问规则,因此不允许来自无效用户的 Ajax 调用(以防有人看到您的代码并尝试根据您发送的 Ajax URL 调用方法帖子)。这是因为在您在“index.php”中使用的默认标头中,您将分配调用特定方法的 JS 脚本,该方法将返回视图,这就是您在“主”内容 div 上呈现的内容。

4- 在 login() 中调用 index 方法。

5- 例如,在 index 方法中,您呈现“index”视图并将路径传递给调用“adminview”的特定 JS 脚本。

您还可以通过 renderPartial 在 AJAX 中使用更新内容

高温高压

于 2013-10-28T17:46:00.607 回答
0

将控制器中的 index 操作更改为以下内容:

public function actionIndex()
{
    $roles = Yii::app()->user->getState('roles');

    $view = $this->getViewForRole($roles); // you have to implement this function
    $this->render($view . '_index');
}

在视图文件夹中创建视图文件:admin_index.php、customer_index.php 等。

于 2013-10-29T09:48:20.247 回答