2

我是 yii 的新手。

如何根据用户角色在我的站点中设置默认主页?yii为此使用了什么方法。

我所做的是,在我的索引操作中,我呈现索引文件。但是我怎样才能使它基于角色呢?

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

有什么帮助吗?

4

2 回答 2

2

您可以根据用户类型更改默认控制器中的视图文件和操作,例如:

if($usertype == 'user_type1') { $this->render('usertypeview1'); }
if($usertype == 'user_type2') { $this->render('usertypeview2'); }

这里 usertypeview1 & usertypeview2 是视图文件夹下视图文件的名称。

您也可以根据您的用户类型更改布局,例如:

if($usertype == 'user_type1') { $this->layout = 'column1'; }
if($usertype == 'user_type2') { $this->layout = 'column2'; } 

这里column1和column2是views文件夹中layout文件夹下的layout文件

我希望这能帮到您。

于 2012-11-03T08:49:27.613 回答
2

您现在可能已经弄清楚了,但没有发布您的答案。以防万一这对任何人都有帮助,一种实现如下。我不知道 RBAC 中是否有内置的东西可以做到这一点,但实现起来很简单。

在文件 protected/controllers/SiteController.php 中更改 1 行:

public function actionLogin()
{
    $model=new LoginForm;

    // if it is ajax validation request
    if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
    {
        echo CActiveForm::validate($model);
        Yii::app()->end();
    }

    // collect user input data
    if(isset($_POST['LoginForm']))
    {
        $model->attributes=$_POST['LoginForm'];
        // validate user input and redirect to the previous page if valid
        if($model->validate() && $model->login())
            //$this->redirect(Yii::app()->user->returnUrl); change this
                      $this->roleBasedHomePage(); //to this
    }
    // display the login form
    $this->render('login',array('model'=>$model));
}

并将此方法添加到同一个文件中

protected function roleBasedHomePage() {
    $role='theusersrole' //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'=>$role.'homepage'));
        break;
        case 'member':
            $this->redirect(Yii::app()->createUrl('site/page',array('view'=>$role.'homepage'));
        break;
        //etc..
    }
}

您重定向到的内容可能会有很大差异,具体取决于您希望主页上的页面类型。在这种情况下,我使用静态页面。如果您的页面名称一致,您可以省略 switch 语句并将角色连接到 createURL 中的视图名称。

于 2013-03-09T23:08:17.647 回答