5 min read

Allow admin to change user role

Allow admin to change user role

Last modified

1. Add following code to _form.php


Yii::app()->getModule('rights');
if (Yii::app()->user->isSuperuser)
{
    $all_roles = new RAuthItemDataProvider('roles', array(
                'type' => 2,
            ));
    $data = $all_roles->fetchData();
    echo CHtml::activeDropDownList($model, 'user_role', CHtml::listData($data, 'name', 'name'));
}

2. Update actionCreate & actionUpdate of UsersController.php like this


public function actionCreate()
{
    $model = new User;

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if (isset($_POST['User']))
    {
        $model->attributes = $_POST['User'];
        if ($model->save())
        {
            Rights::assign($model->user_role, $model->id);
            $this->redirect(array('view', 'id' => $model->id));
        }
    }

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

public function actionUpdate($id)
{
    $model = $this->loadModel($id);

    // Uncomment the following line if AJAX validation is needed
    // $this->performAjaxValidation($model);

    if (isset($_POST['User']))
    {
        $model->attributes = $_POST['User'];
        if ($model->save())
        {
            Yii::app()->getModule('rights');
            $assignedRoles = Rights::getAssignedRoles($model->id);

            foreach ($assignedRoles as $role => $detail)
            {
                Rights::revoke($role, $model->id);
            }
            Rights::assign($model->user_role, $model->id);
            $this->redirect(array('view', 'id' => $model->id));
        }
    }

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