Scriptbaker
ScriptbakerAI & Software Engineering
Yii

Allow admin to change user role

1. Add following code to _form.php [code language=”php”] Yii::app()->getModule(‘rights’); if (Yii::app()->user->isSuperuser) {

· 5 min read

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