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,
));
}
5 min read