2

私はyiiで非常に新しいです。

ユーザーの役割に応じて、自分のサイトにデフォルトのホームページを設定するにはどうすればよいですか? このために yii で使用されるメソッド。

私がしたことは、インデックスアクションでインデックスファイルをレンダリングすることです。しかし、どうすればロールベースにできますか?

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

何か助けはありますか?

4

2 に答える 2

2

おそらく今までにこれを理解していましたが、回答を投稿していませんでした。これが誰にとっても役立つ場合に備えて、1つの実装は次のとおりです。これを行う 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 に答える
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 は、ビュー フォルダーのレイアウト フォルダーの下にあるレイアウト ファイルです。

これがお役に立てば幸いです。

于 2012-11-03T08:49:27.613 に答える