Exemplo n.º 1
0
 /**
  * Update an existing User model. If update is successful, the browser
  * will be redirected to the 'view' page.
  * @param string $id
  * @return mixed
  */
 public function actionUpdate($id)
 {
     if ((Yii::$app->user->can("update-user") || Yii::$app->user->can("user")) && $id != 1) {
         $permissoes = AuthItem::getListToDropDownList();
         // set up user and profile
         $user = $this->findModel($id);
         $user->setScenario("admin");
         $profile = $user->profile;
         $mensagem = "";
         //Informa ao usuário mensagens de erro na view
         //Permissão do usuário
         $authAssignment = new AuthAssignment();
         $authItensUser = AuthAssignment::find()->where(['user_id' => $id])->all();
         $permissoesUser = [];
         foreach ($authItensUser as $aiu) {
             array_push($permissoesUser, $aiu->item_name);
         }
         //Recebe as permissões salvas do usuário
         $authAssignment->item_name = $permissoesUser;
         // load post data and validate
         $post = Yii::$app->request->post();
         if ($user->load($post) && $user->validate() && $profile->load($post) && $profile->validate()) {
             //Inicia a transação:
             $transaction = \Yii::$app->db->beginTransaction();
             try {
                 $itensInseridos = true;
                 if (isset($post['AuthAssignment']['item_name']) && !empty($post['AuthAssignment']['item_name'])) {
                     Yii::$app->db->createCommand("DELETE from auth_assignment WHERE \n                user_id = :iduser ", [':iduser' => $user->id])->execute();
                     $roles = $post['AuthAssignment']['item_name'];
                     foreach ($roles as $role) {
                         $user->alterarPermissoes($role, $user->id);
                     }
                 } else {
                     Yii::$app->db->createCommand("DELETE from auth_assignment WHERE \n                user_id = :iduser ", [':iduser' => $user->id])->execute();
                 }
                 if (!$user->save()) {
                     $mensagem = "Não foi possível salvar os dados";
                     $transaction->rollBack();
                     //desfaz alterações no BD
                     $itensInseridos = false;
                 }
                 if (!$profile->setUser($user->id)->save()) {
                     $mensagem = "Não foi possível salvar os dados";
                     $transaction->rollBack();
                     //desfaz alterações no BD
                     $itensInseridos = false;
                 }
                 if ($itensInseridos) {
                     $transaction->commit();
                     return $this->redirect(['view', 'id' => $user->id]);
                 }
             } catch (\Exception $exception) {
                 $transaction->rollBack();
                 $mensagem = "Ocorreu uma falha inesperada ao tentar salvar";
             }
         }
         // render
         return $this->render('update', compact('user', 'profile', 'permissoes', 'permissoesUser', 'mensagem', 'authAssignment'));
     } else {
         throw new ForbiddenHttpException("Acesso negado!");
     }
 }
 /**
  * Display registration page
  */
 public function actionRegister()
 {
     /** @var \amnah\yii2\user\models\User $user */
     /** @var \amnah\yii2\user\models\Profile $profile */
     /** @var \amnah\yii2\user\models\Role $role */
     // AuthAssigment
     // set up new user/profile objects
     $user = $this->module->model("User", ["scenario" => "register"]);
     $profile = $this->module->model("Profile");
     // load post data
     $post = Yii::$app->request->post();
     if ($user->load($post)) {
         // ensure profile data gets loaded
         $profile->load($post);
         // validate for ajax request
         if (Yii::$app->request->isAjax) {
             Yii::$app->response->format = Response::FORMAT_JSON;
             return ActiveForm::validate($user, $profile);
         }
         // var_dump($post);
         if (isset($post['roles'])) {
             //                $aux = $post['User']['role_id'];
             //                $roles = explode(',', $aux);
             $roles = $post['roles'];
             // var_dump($post['User']['role_id']);
             // $roles = $post['User']['role_id'];
         }
         // validate for normal request
         if ($user->validate() && $profile->validate()) {
             // perform registration
             $role = $this->module->model("Role");
             // VEJA AQUI !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
             $user->setRegisterAttributes($role::ROLE_USER, $user::STATUS_ACTIVE)->save();
             // $user->setPermissoes(1,$user->id);
             $profile->setUser($user->id)->save();
             $idUser = $user->id;
             // var_dump($idUser);
             foreach ($roles as $role) {
                 $user->setPermissoes($role, $idUser);
             }
             // $this->afterRegister($user);
             // set flash
             // don't use $this->refresh() because user may automatically be logged in and get 403 forbidden
             $successText = Yii::t("user", "Successfully registered [ {displayName} ]", ["displayName" => $user->getDisplayName()]);
             $guestText = "";
             if (Yii::$app->user->isGuest) {
                 //$guestText = Yii::t("user", " - Please check your email to confirm your account");
             }
             Yii::$app->session->setFlash("Register-success", $successText . $guestText);
         }
     }
     $permissoes = AuthItem::getListToDropDownList();
     return $this->render("register", compact("user", "profile", "permissoes", "macroauthitems", "permissoesRegister"));
 }