<h1><?php echo Yii::t('userGroupsModule.general', 'Users'); ?> </h1> <?php if (Yii::app()->user->hasFlash('user')) { ?> <div class="info"> <?php echo Yii::app()->user->getFlash('user'); ?> </div> <?php } $this->widget('zii.widgets.grid.CGridView', array('dataProvider' => $userModel->search(), 'id' => 'user-groups-user-grid', 'enableSorting' => false, 'enablePagination' => false, 'filter' => $userModel, 'summaryText' => false, 'selectionChanged' => 'function(id) { getPermission("' . Yii::app()->baseUrl . '", "' . UserGroupsAccess::USER . '", $.fn.yiiGridView.getSelection(id))}', 'columns' => array('username', array('name' => 'status', 'value' => 'UserGroupsLookup::resolve("status",$data->status). ((int)$data->status === UserGroupsUser::WAITING_ACTIVATION || (int)$data->status === UserGroupsUser::PASSWORD_CHANGE_REQUEST ? ": <b>".$data->activation_code."</b>" : NULL). ((int)$data->status === UserGroupsUser::BANNED ? ": <b>".$data->ban."</b>" : NULL)', 'type' => 'raw', 'filter' => CHtml::dropDownList('UserGroupsUser[status]', $userModel->status, array_merge(array('null' => Yii::t('userGroupsModule.admin', 'all')), CHtml::listData(UserGroupsLookup::model()->findAll(), 'value', 'text')))), array('name' => 'group_name', 'filter' => CHtml::listData(UserGroupsGroup::model()->findAll(array('order' => 'level')), 'id', 'groupname'))))); if (Yii::app()->user->pbac('userGroups.admin.admin')) { echo CHtml::ajaxLink(Yii::t('userGroupsModule.admin', 'add user'), Yii::app()->createUrl('/userGroups/admin/accessList', array('what' => UserGroupsAccess::USER, 'id' => 'new')), array('success' => 'js: function(data){ $("#user-detail").slideUp("slow", function(){ $("#user-detail").html(data).slideDown();}); }'), array('id' => 'new-user-' . time())); } ?> <div id="user-detail" style="display:none;"></div>
/** * parameters preparation after a select is executed */ public function afterFind() { switch ($this->options) { case !Yii::app()->user->accessRules === UserGroupsUser::ROOT_ACCESS && !isset(Yii::app()->user->accessRules['userGroups']['admin']['admin']): if ($this->options !== 'CONST' && $this->options !== 'BOOL' && $this->options !== 'GROUP_LIST') { $options = unserialize($this->options); $this->render = $options[$this->value]; } else { $this->render = $this->value; } break; case 'CONST': $this->render = $this->value; break; case 'BOOL': $this->render = CHtml::dropDownList("UserGroupsConfiguration[{$this->id}]", $this->value, array('TRUE' => 'TRUE', 'FALSE' => 'FALSE')); break; case 'GROUP_LIST': $this->render = CHtml::dropDownList("UserGroupsConfiguration[{$this->id}]", $this->value, UserGroupsGroup::groupList()); break; default: $this->render = CHtml::dropDownList("UserGroupsConfiguration[{$this->id}]", $this->value, unserialize($this->options)); break; } if (Yii::app()->controller->module instanceof UserGroupsModule) { $this->description = Yii::t('userGroupsModule.conf_description', '' . $this->description); } parent::afterFind(); }
/** * check if the group assigned to the user has a lower * level then the one of the user who is creating or * updating the user * This is the 'levelCheck' validator as declared in rules(). */ public function levelCheck($attribute, $params) { $group = UserGroupsGroup::model()->findByPk((int) $this->group_id); if ($group->level >= Yii::app()->user->level) { $this->addError('level', Yii::t('userGroupsModule.admin', 'You cannot assign to a User a Group that has a Level equal or higher then the one you belong to')); } }
/** * deletes the item from the database * @param Array $formData */ private function itemDelete($formData) { // check if the user performing the action has the permission to do it if (!Yii::app()->user->pbac('admin')) { Yii::app()->user->setFlash((int) $formData['what'] === UserGroupsAccess::USER ? 'user' : 'group', Yii::t('userGroupsModule.admin', 'You don\'t have the permission to delete any user/group')); } else { // check if the user is trying to delete a valid id if (Yii::app()->request->isPostRequest && $formData['id'] !== 'new' && (int) $formData['id'] !== UserGroupsUser::ROOT) { // load the item to delete if ((int) $formData['what'] === UserGroupsAccess::GROUP) { $model = UserGroupsGroup::model()->findByPk((int) $formData['id']); } else { if ((int) $formData['what'] === UserGroupsAccess::USER) { $model = UserGroupsUser::model()->findByPk((int) $formData['id']); } } if ($model) { // check if your level is higher then the user/group you are about to delete if ($model->level < Yii::app()->user->level) { if ($model->delete() && UserGroupsAccess::model()->deleteAll('element = ' . $formData['what'] . ' AND element_id = ' . $formData['id'])) { Yii::app()->user->setFlash((int) $formData['what'] === UserGroupsAccess::USER ? 'user' : 'group', Yii::t('userGroupsModule.admin', '{what} deleted.', array('{what}' => ucfirst($formData['displayname'])))); } else { Yii::app()->user->setFlash((int) $formData['what'] === UserGroupsAccess::USER ? 'user' : 'group', Yii::t('userGroupsModule.admin', 'Impossible to delete the requested user/group. An Error Occurred')); } } else { Yii::app()->user->setFlash((int) $formData['what'] === UserGroupsAccess::USER ? 'user' : 'group', Yii::t('userGroupsModule.admin', 'You cannot delete a user/group with a higher level then yours.')); } } else { Yii::app()->user->setFlash((int) $formData['what'] === UserGroupsAccess::USER ? 'user' : 'group', Yii::t('userGroupsModule.admin', 'The requested user/group does not exist and cannot be deleted.')); } } else { Yii::app()->user->setFlash((int) $formData['what'] === UserGroupsAccess::USER ? 'user' : 'group', Yii::t('userGroupsModule.admin', 'Invalid Request.')); } } $this->redirect(Yii::app()->baseUrl . '/userGroups/admin'); }
/** * creates the root group and the user group */ private function initializeGroups() { // root group $group_model = new UserGroupsGroup('installation'); $group_model->id = UserGroupsUser::ROOT; $group_model->groupname = 'root'; $group_model->level = UserGroupsUser::ROOT_LEVEL; $group_model->save(); // check if the root group was created with the right id if ((int) $group_model->id !== UserGroupsUser::ROOT) { throw new CHttpException(500, Yii::t('userGroupsModule.install', 'Error during installation. Couldn\'t create root group with id {id}', array('{id}' => UserGroupsUser::ROOT))); Yii::app()->end(); } // user group $group_model = new UserGroupsGroup('installation'); $group_model->groupname = 'user'; $group_model->home = '/userGroups'; $group_model->level = 1; $group_model->save(); }
<?php #form used to ban user if ((Yii::app()->user->pbac('userGroups.user.admin') || Yii::app()->user->pbac('userGroups.admin.admin')) && (int) $data->status === UserGroupsUser::ACTIVE && $data->relUserGroupsGroup->level < Yii::app()->user->level) { ?> <div id="groups-group-container"> <?php $form = $this->beginWidget('CActiveForm', array('id' => 'user-groups-group-form', 'enableAjaxValidation' => false)); ?> <div class="row"> <?php echo $form->labelEx($data, 'group_id'); ?> <?php echo $form->dropDownList($data, 'group_id', CHtml::listData(UserGroupsGroup::model()->findAll(array('order' => 'level DESC')), 'id', 'groupname')); ?> <?php echo $form->error($data, 'group_id'); ?> </div> <div class="row buttons"> <?php echo CHtml::ajaxSubmitButton('Сохранить', Yii::app()->baseUrl . '/userGroups/user/changeGroup/id/' . $data->id, array('update' => '#userGroups-container'), array('id' => 'submit-mail' . $data->id . rand())); ?> </div> <?php $this->endWidget(); ?>
<?php $this->breadcrumbs = array(Yii::t('UserGroupsModule.general', 'User List')); ?> <div id="userGroups-container"> <div class="userGroupsMenu-container"> <?php $this->renderPartial('/admin/menu', array('mode' => 'profile', 'list' => true)); ?> </div> <h1>Users List</h1> <p> You may optionally enter a comparison operator (<b><</b>, <b><=</b>, <b>></b>, <b>>=</b>, <b><></b> or <b>=</b>) at the beginning of each of your search values to specify how the comparison should be done. </p> <?php $this->widget('zii.widgets.grid.CGridView', array('id' => 'user-groups-user-grid', 'dataProvider' => $model->search(), 'filter' => $model, 'selectableRows' => 0, 'columns' => array(array('name' => 'username', 'value' => Yii::app()->user->pbac('userGroups.user.admin') || Yii::app()->user->pbac('userGroups.admin.admin') ? 'CHtml::link($data->username, Yii::app()->baseUrl ."/userGroups?u=".$data->id)' : '$data->username', 'type' => 'raw'), array('name' => 'group_name', 'filter' => CHtml::listData(UserGroupsGroup::model()->findAll(array('order' => 'level DESC')), 'groupname', 'groupname')), array('name' => 'email', 'visible' => Yii::app()->user->pbac('userGroups.user.admin')), array('name' => 'status', 'value' => '$data->status !=1 ? UserGroupsLookup::resolve("status",$data->status) : UserGroupsLookup::resolve("status",$data->status)."<br/>".CHtml::link("активировать", Array("/userGroups/user/adminActivate","id"=>$data->id), Array("class"=>"ajaxupdate"))', 'visible' => Yii::app()->user->pbac('userGroups.user.admin'), 'type' => 'raw', 'filter' => CHtml::dropDownList('UserGroupsUser[status]', $model->status, array_merge(array('null' => Yii::t('UserGroupsModule.admin', 'all')), CHtml::listData(UserGroupsLookup::model()->findAll(), 'value', 'text')))), array('class' => 'CButtonColumn', 'template' => '{delete}')))); Yii::app()->clientScript->registerScript('ajaxupdate', "\r\n\t\$('#user-groups-user-grid a.ajaxupdate').live('click', function() {\r\n\t\t\t\$.fn.yiiGridView.update('user-groups-user-grid', {\r\n\t\t\t\t\ttype: 'POST',\r\n\t\t\t\t\turl: \$(this).attr('href'),\r\n\t\t\t\t\tsuccess: function() {\r\n\t\t\t\t\t\t\t\$.fn.yiiGridView.update('user-groups-user-grid');\r\n\t\t\t\t\t}\r\n\t\t\t});\r\n\t\t\treturn false;\r\n\t});\r\n"); ?> </div>
<?php $this->widget('zii.widgets.grid.CGridView', array('dataProvider' => $dataProvider, 'ajaxUpdate' => false, 'enableSorting' => false, 'summaryText' => false, 'id' => 'rule-list', 'selectableRows' => 0, 'columns' => array(array('name' => 'Module'), array('name' => 'Controller'), array('name' => 'Read', 'type' => 'raw'), array('name' => 'Write', 'type' => 'raw'), array('name' => 'Admin', 'type' => 'raw')))); if (Yii::app()->user->pbac('userGroups.admin.admin')) { ?> <div class="row"> <?php if ((int) $what === UserGroupsAccess::GROUP) { echo CHtml::label(Yii::t('userGroupsModule.general', 'Group Level'), 'UserGroupsAccess_' . $what . '_level', array('class' => 'inline')) . CHtml::dropDownList('UserGroupsAccess[' . $what . '][level]', $data->level, array_reverse(range(0, Yii::app()->user->level - 1), true)); echo CHtml::label(Yii::t('userGroupsModule.general', 'Home'), 'UserGroupsAccess_' . $what . '_home', array('class' => 'inline')) . CHtml::dropDownList('UserGroupsAccess[' . $what . '][home]', $data->home, UserGroupsAccess::homeList()); echo CHtml::label(Yii::t('userGroupsModule.general', 'Group Name'), 'UserGroupsAccess_' . $what . '_groupname', array('class' => 'inline')); echo CHtml::textField('UserGroupsAccess[' . $what . '][groupname]', $name); } if ((int) $what === UserGroupsAccess::USER) { echo CHtml::label(Yii::t('userGroupsModule.general', 'User Name'), 'UserGroupsAccess_' . $what . '_username', array('class' => 'inline')); echo CHtml::textField('UserGroupsAccess[' . $what . '][username]', $name); echo CHtml::label(Yii::t('userGroupsModule.general', 'Group'), 'UserGroupsAccess_' . $what . '_group_id', array('class' => 'inline')) . CHtml::dropDownList('UserGroupsAccess[' . $what . '][group_id]', $data->group_id, UserGroupsGroup::groupList()); $home_lists = UserGroupsAccess::homeList(); array_unshift($home_lists, Yii::t('userGroupsModule.admin', 'Group Home: {home}', array('{home}' => $data->group_home))); echo CHtml::label(Yii::t('userGroupsModule.general', 'Home'), 'UserGroupsAccess_' . $what . '_home', array('class' => 'inline')) . CHtml::dropDownList('UserGroupsAccess[' . $what . '][home]', $data->home, $home_lists); echo CHtml::label(Yii::t('userGroupsModule.general', 'Email'), 'UserGroupsAccess_' . $what . '_email', array('class' => 'inline')) . CHtml::textField('UserGroupsAccess[' . $what . '][email]', $data->email); } ?> </div> <?php if ($id === 'new' && (int) $what === UserGroupsAccess::USER) { ?> <div class="row"> <?php echo CHtml::label(Yii::t('userGroupsModule.general', 'Password'), 'UserGroupsAccess_' . $what . '_password', array('class' => 'inline')); ?> <?php