public function createUser(RegistrationForm $form) { $transaction = Yii::app()->getDb()->beginTransaction(); try { $user = new User(); $password = rand(1000000, 9999999); $Company = new Company(); if ($form->organization_name) { $Company->name = $form->organization_name; } $Company->create = new CDbExpression('NOW()'); $Company->save(); $user->email = $form->email; $user->contact_phone = $form->phone; $user->contact_phone_prefix = $form->prefphone; $user->company_id = $Company->id; $user->status = User::STATUS_ACTIVE; //Сделать автопроверку выписки $user->setAttribute('hash', $this->hasher->hashPassword($password)); if ($user->save() && ($token = $this->tokenStorage->createAccountActivationToken($user)) !== false) { $user->sendCRMRegistration(); User::savePost($user); \Yii::import('application.modules.rbac.models.*'); $model = new AuthAssignment(); //$model->setAttributes(['userid' => $user->id,'itemname' => 'standart']); //Назаначаем роль владельца компании без инн // $model->setAttributes(['userid' => $user->id,'itemname' => 'own_wo_inn']); //Назаначаем роль владельца компании без инн $model->setAttributes(['userid' => $user->id, 'itemname' => 'owner']); //Назаначаем роль владельца компании без инн if (!$model->save()) { throw new CDbException(Yii::t('UserModule.rbac', 'There is an error occurred when saving data!')); } Yii::app()->eventManager->fire(UserEvents::SUCCESS_REGISTRATION, new UserRegistrationEvent($form, $user, $token, $password)); Yii::log(Yii::t('UserModule.user', 'Account {nick_name} was created', ['{nick_name}' => $user->email]), CLogger::LEVEL_INFO, UserModule::$logCategory); $transaction->commit(); $LoginForm = new LoginForm(); $LoginForm->email = $user->email; $LoginForm->password = $password; Yii::app()->authenticationManager->login($LoginForm, Yii::app()->getUser(), Yii::app()->getRequest()); return $user; } throw new CException(Yii::t('UserModule.user', 'Error creating account!')); } catch (Exception $e) { Yii::log(Yii::t('UserModule.user', 'Error {error} account creating!', ['{error}' => $e->__toString()]), CLogger::LEVEL_INFO, UserModule::$logCategory); $transaction->rollback(); Yii::app()->eventManager->fire(UserEvents::FAILURE_REGISTRATION, new UserRegistrationEvent($form, $user)); return false; } }
public function actionAssign($id = null) { $user = User::model()->findByPk((int) $id); if (!$user) { $this->redirect(['userList']); } if (Yii::app()->getRequest()->isPostRequest) { /* получение названий ролей, которые есть в базе */ $existingRoles = Yii::app()->db->createCommand('SELECT name FROM {{user_user_auth_item}}')->queryColumn(); $transaction = Yii::app()->db->beginTransaction(); try { AuthAssignment::model()->deleteAll('userid = :userid', [':userid' => (int) $user->id]); // убираем дубликаты и несуществующие роли $roles = array_intersect(array_unique((array) Yii::app()->getRequest()->getPost('AuthItem')), $existingRoles); foreach ($roles as $op) { $model = new AuthAssignment(); $model->setAttributes(['userid' => $user->id, 'itemname' => $op]); if (!$model->save()) { throw new CDbException(Yii::t('RbacModule.rbac', 'There is an error occurred when saving data!')); } } $transaction->commit(); Yii::app()->getUser()->setFlash(yupe\widgets\YFlashMessages::SUCCESS_MESSAGE, Yii::t('RbacModule.rbac', 'Data was updated!')); /*сброс кэша меню*/ Yii::app()->getCache()->delete('YAdminPanel::' . $id . '::' . Yii::app()->getLanguage()); /*сброс кеша прав*/ Yii::app()->getCache()->delete(Yii::app()->getUser()->rbacCacheNameSpace . $id); $this->redirect(['assign', 'id' => $user->id]); } catch (Exception $e) { Yii::app()->getUser()->setFlash(yupe\widgets\YFlashMessages::ERROR_MESSAGE, $e->getMessage()); $transaction->rollback(); } } $rbacTree = new RbacTree($user); $tree = $rbacTree->getTreeRoles(); $this->render('assign', ['tree' => $tree, 'model' => $user]); }
public function actionAssign($id) { $user = Users::model()->findByPk((int) $id); if (!$user) { throw new CHttpException(404); } $items = AuthItem::model()->findAll(array('order' => 'type DESC')); $itemsData = CHtml::listData(AuthItemChild::model()->findAll(), 'child', 'parent'); if (Yii::app()->request->isPostRequest && count($_POST)) { $itemsArray = CHtml::listData($items, 'name', 'description'); $transaction = Yii::app()->db->beginTransaction(); try { if (count($_POST)) { AuthAssignment::model()->deleteAll('userid = :userid', array(':userid' => (int) $user->id)); foreach ($_POST as $op => $val) { if (!isset($itemsArray[$op])) { continue; } $model = new AuthAssignment(); $model->setAttributes(array('userid' => $user->id, 'itemname' => $op)); if (!$model->save()) { throw new CDbException('При сохранении произошла ошибка!'); } } } $transaction->commit(); Yii::app()->user->setFlash('notice', 'Данные обновлены!'); $this->redirect(array('assign', 'id' => $user->id)); } catch (Exception $e) { Yii::app()->user->setFlash('error', $e->getMessage()); $transaction->rollback(); } } //построить дерево $tree = array(); foreach ($items as $item) { if ($item->type === AuthItem::TYPE_ROLE && !isset($tree[$item->name])) { $tree[$item->name] = array('text' => CHtml::checkBox($item->name, Yii::app()->user->checkAccess($item->name, $user->id), array('name' => 'operations', 'class' => 'root')) . $item->description . " ({$item->getType()})"); } if ($item->type === AuthItem::TYPE_TASK) { // проверить есть ли для нее родитель if (isset($itemsData[$item->name]) && $itemsData[$item->name]) { $tree[$itemsData[$item->name]]['children'][$item->name] = array('text' => CHtml::checkBox($item->name, Yii::app()->user->checkAccess($item->name, $user->id), array('name' => 'operations', 'class' => 'root')) . $item->description . " ({$item->getType()})"); } else { $tree[$item->name] = array('text' => CHtml::checkBox($item->name, Yii::app()->user->checkAccess($item->name, $user->id), array('name' => 'operations')) . $item->description . " ({$item->getType()})"); } } if ($item->type == AuthItem::TYPE_OPERATION) { if (isset($itemsData[$item->name]) && $itemsData[$item->name]) { // задача по своей сути $parent = $itemsData[$item->name]; if (isset($itemsData[$parent]) && $itemsData[$parent]) { $tree[$itemsData[$parent]]['children'][$itemsData[$item->name]]['children'][$item->name] = array('text' => CHtml::checkBox($item->name, Yii::app()->user->checkAccess($item->name, $user->id), array('name' => 'operations')) . $item->description . " ({$item->getType()})"); } else { $tree[$itemsData[$item->name]]['children'][$item->name] = array('text' => CHtml::checkBox($item->name, Yii::app()->user->checkAccess($item->name, $user->id), array('name' => 'operations')) . $item->description . " ({$item->getType()})"); } } else { $tree[$item->name] = array('text' => CHtml::checkBox($item->name, Yii::app()->user->checkAccess($item->name, $user->id), array('name' => 'operations')) . $item->description . " ({$item->getType()})"); } } } $this->render('assign', array('tree' => $tree, 'model' => $user)); }
/** * Сохранение данных и отправка письма для подтверждение email */ private function saveDataAndSendEmail($user, $form) { $transaction = Yii::app()->getDb()->beginTransaction(); try { $password = rand(1000000, 9999999); $user->email = $form->email; $user->contact_phone = $form->phone; $user->contact_phone_prefix = $form->prefphone; $user->old_contact_phone = $form->oldphone; $user->create_time = date('Y-m-d H:i:s'); $user->setAttribute('hash', Yii::app()->userManager->hasher->hashPassword($password)); //if ($user->save() && ($token = Yii::app()->userManager->tokenStorage->createAccountActivationToken($user)) !== false) { if ($user->save()) { $token = Yii::app()->userManager->tokenStorage->createAccountActivationToken($user); $user->sendCRMRegistration(); User::savePost($user); \Yii::import('application.modules.rbac.models.*'); $model = new AuthAssignment(); $model->setAttributes(['userid' => $user->id, 'itemname' => 'owner']); //Назаначаем роль владельца компании if (!$model->save()) { throw new CDbException(Yii::t('UserModule.rbac', 'There is an error occurred when saving data!')); } Yii::app()->eventManager->fire(UserEvents::SUCCESS_ACTIVATION, new UserActivationEvent($form, $user, $token, $password)); Yii::log(Yii::t('UserModule.user', 'Guest Account {nick_name} was registred', ['{nick_name}' => $user->email]), CLogger::LEVEL_INFO, UserModule::$logCategory); $transaction->commit(); $LoginForm = new LoginForm(); $LoginForm->email = $user->email; $LoginForm->password = $password; Yii::app()->authenticationManager->login($LoginForm, Yii::app()->getUser(), Yii::app()->getRequest()); return $user; } throw new CException(Yii::t('UserModule.user', 'Error registr account!')); } catch (Exception $e) { Yii::log(Yii::t('UserModule.user', 'Error {error} account registr!', ['{error}' => $e->__toString()]), CLogger::LEVEL_INFO, UserModule::$logCategory); $transaction->rollback(); Yii::app()->eventManager->fire(UserEvents::FAILURE_ACTIVATION, new UserActivationEvent($form, $user)); return false; } }
public function actionAdd($id = 0) { $company_id = Yii::app()->getUser()->getProfile()->company_id; $criteria = new CDbCriteria(); $criteria->addCondition(':company_id = t.company_id'); $criteria->params = [':company_id' => $company_id]; /* if( $id == 0 && User::model()->count($criteria) > 1 && !Yii::app()->user->checkAccess('premium') ) { throw new CHttpException(403,'Вы не можете добавлять больше 1 сотрудника'); } */ if (!empty($id)) { $User = User::model()->findByPk($id); if (!Yii::app()->user->checkAccess('admin') && (Yii::app()->getUser()->getProfile()->modules->head != UserModules::DIRECTOR_COMPANY || Yii::app()->user->getProfile()->company_id != $User->company_id)) { throw new CHttpException(403); } } else { if (!Yii::app()->user->checkAccess('admin') && (Yii::app()->getUser()->getProfile()->modules->head != UserModules::DIRECTOR_COMPANY || Yii::app()->getUser()->getProfile()->company->active == '0')) { throw new CHttpException(403); } $User = new User(); } $User->scenario = 'profile'; if (isset($_POST['save'])) { $data = $_POST['User']; if (isset($data['id']) && empty($data['hash'])) { unset($data['hash']); } $data['company_id'] = $company_id; $User->setAttributes($data, false); if ($User->isNewRecord) { $role = 'user'; } if ($User->validate()) { if (!empty($data['hash'])) { $User->hash = Yii::app()->userManager->hasher->hashPassword($data['hash']); } $User->status = User::STATUS_ACTIVE; if ($User->save()) { //если пользователь зарегистрирован в CRM обновляем его данные if (isset($User->crm_user_id)) { User::sendCRM($User); } $new_user = $User::getUserByEmail($User->email); if (empty($new_user->id)) { throw new CHttpException(402, "User_id Is EMPTY!!! user={$new_user->email} id={$new_user->id}"); } $password = rand(1000000, 9999999); $token = Yii::app()->userManager->tokenStorage->createAccountActivationToken($new_user); if (!$token) { throw new CHttpException(402, "Token Is EMPTY!!! password={$password} user={$User->email} id={$User->id}"); } $form = new ActivationForm('default'); Yii::app()->eventManager->fire(UserEvents::SUCCESS_ACTIVATION, new UserActivationEvent($form, $new_user, $token, $password)); } if (isset($role)) { $User = User::model()->findByAttributes(['email' => $User->email]); $model = new AuthAssignment(); $model->setAttributes(['userid' => $User->id, 'itemname' => $role]); //Назаначаем роль пользователя if (!$model->save()) { throw new CDbException(Yii::t('CabinetModule.staff', print_r($model->errors, 1))); } User::savePostUser($User); } $this->redirect('/cabinet/staff/list/'); } } $this->render('add', ['User' => $User]); }