public function signIn() { $attributes = $this->getUserAttributes(); $password = Yii::$app->security->generateRandomString(6); $user = new User(['password' => $password]); if ($attributes['emails']) { $email = current($attributes['emails']); $user->email = $email['value']; } if ($attributes['name']) { $user->first_name = isset($attributes['name']['givenName']) ? $attributes['name']['givenName'] : ''; $user->last_name = isset($attributes['name']['familyName']) ? $attributes['name']['familyName'] : ''; } $user->generateAuthKey(); $user->generatePasswordResetToken(); $transaction = $user->getDb()->beginTransaction(); if ($user->save()) { // create empty profile $profile = new UserProfile(['user_id' => $user->getId()]); $profile->save(); if (isset($attributes['image'])) { if ($attributes['image']['url']) { // upload facebook images $prepareUrl = substr($attributes['image']['url'], 0, strpos($attributes['image']['url'], '?')); $fname = basename($prepareUrl); $ch = curl_init($attributes['image']['url']); $fp = fopen(Yii::getAlias('@uploads/users/' . $fname), 'wb'); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_exec($ch); curl_close($ch); fclose($fp); $user->avatar = $fname; } } $user->update(false); // assign role default ROLE_USER $authManager = Yii::$app->authManager; $authManager->assign($authManager->getRole(User::ROLE_USER), $user->getId()); $auth = new UserAuth(['user_id' => $user->id, 'source' => $this->getId(), 'source_id' => (string) $attributes['id']]); if ($auth->save()) { $transaction->commit(); // auto login Yii::$app->user->login($user); return true; } else { Yii::$app->getSession()->setFlash('error', 'Auth client "' . $this->getTitle() . '" not connected'); } } else { Yii::$app->getSession()->setFlash('error', 'User "' . $attributes['login'] . '" not register'); } return false; }
/** * Signs user up. * * @return User|null the saved model or null if saving fails */ public function signup() { if ($this->validate()) { $user = new User(); $user->username = $this->username; $user->email = $this->email; $user->setPassword($this->password); $user->generateAuthKey(); // start transaction $transaction = $user->getDb()->beginTransaction(); if ($user->save()) { // create empty profile $profile = new UserProfile(['user_id' => $user->getId()]); $profile->save(); // assign disable user role ROLE_DISABLE $authManager = Yii::$app->authManager; $authManager->assign($authManager->getRole(User::ROLE_DISABLE), $user->getId()); // end transaction $transaction->commit(); return $user; } } return null; }
public static function changeRole($role_name, $user_id) { $auth = Yii::$app->getAuthManager(); $role = $auth->getRole($role_name); $activeRole = current($auth->getRolesByUser($user_id)); if ($activeRole->name == $role_name) { return true; } // if super user id = 1 // role not change if ($user_id == 1) { Yii::$app->getSession()->setFlash('warning', Yii::t('users', 'Can not change user role for super admin')); return false; } if ($role) { $model = new User(); $transaction = $model->getDb()->beginTransaction(); $auth->revokeAll($user_id); $auth->assign($role, $user_id); $transaction->commit(); } return true; }