帐号管理 * Class AccountController * @package app\ht\modules\system\controllers */ class AccountController extends BaseController { /** * 帐号管理显示页面 */ public function actionIndex() { $request = Yii::$app->request; /** * 组织SQL */ $userQuery = SysUserModel::find() ->leftJoin(SysUserProfileModel::tableName(), '`sys_user_profile`.`sys_user_id` = `sys_user`.`id`') ->orderBy('sys_user.id ASC'); /** * 查询过滤处理 */ $get = []; /** * 过滤 */ $keyword = $request->get("keyword"); $get = []; if ($keyword) { $userQuery->filterWhere(['or', ['like', 'username', $keyword], ['like', 'realname', $keyword], ]); } $get['keyword'] = $keyword; /** * 分页处理 */ $pageSize = $request->get("pageSize") ? (int) $request->get("pageSize") : 20; $pages = new Pagination(['totalCount' => $userQuery->count(), 'pageSize' => $pageSize]); $users = $userQuery->offset($pages->offset)->limit($pages->limit)->all(); /** * 数据整理 */ $data = []; $auth = Yii::$app->authManager; foreach ($users as $user) { // 角色 $roles = $auth->getRolesByUser($user->id); $rn = []; foreach ($roles as $role) { $rn[] = $role->name; } $roles = implode(',', $rn); $data[] = [ 'id' => $user->id, 'username' => $user->username, 'roles' => $roles, 'realname' => $user->profile ? $user->profile->realname : '', 'email' => $user->profile ? $user->profile->email : '', 'mobile' => $user->profile ? $user->profile->mobile : '', 'is_enable_label' => $user->is_enable ? '启用' : '禁用', 'is_enable_opt' => $user->is_enable ? '禁用' : '启用', ]; } /** * 渲染模板 */ return $this->render('index', [ 'users' => $data, 'pages' => $pages, 'get' => $get, ]); } /** * 新增界面 */ public function actionCreate() { return $this->render('create'); } /** * 新增执行动作 */ public function actionDoAdd() { $post = Yii::$app->request->post(); if (empty($post)) { return; } $password = isset($post['password']) ? $post['password'] : ''; $passworConfirm = isset($post['password_confirm']) ? $post['password_confirm'] : ''; $username = isset($post['username']) ? $post['username'] : ''; $realname = isset($post['realname']) ? $post['realname'] : ''; $email = isset($post['email']) ? $post['email'] : ''; $mobile = isset($post['mobile']) ? $post['mobile'] : ''; $is_enable = isset($post['is_enable']) ? 1 : 0; if ('' == $username || !(preg_match("/^[0-9a-zA-Z]{6,10}$/", $username))) { Yii::$app->session->setFlash('danger', '用户名不能是空格,并且必须是6~12位的英文或数字'); return $this->redirect(['/system/account/create']); } if ('' == $realname) { Yii::$app->session->setFlash('danger', '名称不能是空格'); return $this->redirect(['/system/account/create']); } // 用户名不允许有冒号 if (strpos($username, ':') !== false) { Yii::$app->session->setFlash('danger', '用户名不能包含冒号,请重新输入'); return $this->redirect(['/system/account/create']); } // 验证密码一致 if ($password != $passworConfirm) { Yii::$app->session->setFlash('danger', '两次输入密码不一致,请重新输入'); return $this->redirect(['/system/account/create']); } //验证用户名为唯一,只在当前商城唯一 $user = SysUserModel::find()->where(['username' => $username])->one(); if ($user) { Yii::$app->session->setFlash('danger', '该用户名已经存在,请重新输入'); return $this->redirect(['/system/account/create']); } $transaction = Yii::$app->db->beginTransaction(); try { $model = Yii::createObject(SysUserModel::className()); $model->username = $username; $model->password = $password; $model->is_enable = $is_enable; $model->save(); $profile = Yii::createObject(SysUserProfileModel::className()); $profile->sys_user_id = $model->id; $profile->realname = $realname; $profile->email = $email; $profile->mobile = $mobile; $profile->save(); $transaction->commit(); } catch (Exception $e) { Yii::$app->session->setFlash('danger', '数据保存失败,请重新操作'); $transaction->rollBack(); return $this->redirect(['/system/account/create']); } Yii::$app->session->setFlash('success', '用户添加成功'); return $this->redirect(['index']); } /** * 更新界面 */ public function actionUpdate($id) { $model = $this->findModel($id); return $this->render('update', [ 'model' => $model, ]); } /** * 更新执行动作 */ public function actionDoUpdate($id) { $post = Yii::$app->request->post(); if (empty($post)) { return; } $username = isset($post['username']) ? $post['username'] : ''; $realname = isset($post['realname']) ? $post['realname'] : ''; $email = isset($post['email']) ? $post['email'] : ''; $mobile = isset($post['mobile']) ? $post['mobile'] : ''; $is_enable = isset($post['is_enable']) ? 1 : 0; $model = $this->findModel($id); $username = trim($username); $realname = trim($realname); if ('' == $username || !(preg_match("/^[0-9a-zA-Z]{6,10}$/", $username))) { Yii::$app->session->setFlash('danger', '用户名不能是空格,并且必须是6~12位的英文或数字'); return $this->redirect(['/system/account/update', 'id' => $model->id]); } if ('' == $realname) { Yii::$app->session->setFlash('danger', '名称不能是空格'); return $this->redirect(['/system/account/update', 'id' => $model->id]); } // 用户名不允许有冒号 if (strpos($username, ':') !== false) { Yii::$app->session->setFlash('danger', '用户名不能包含冒号,请重新输入'); return $this->redirect(['/system/account/update', 'id' => $model->id]); } // 验证用户名为唯一 if ($model->username != $username) { $user = SysUserModel::find()->where(['username' => $username])->one(); if ($user) { Yii::$app->session->setFlash('danger', '该用户名已经存在,请重新输入'); return $this->redirect(['/system/account/update', 'id' => $model->id]); } } $transaction = Yii::$app->db->beginTransaction(); try { $model->username = $username; $model->is_enable = $is_enable; $model->save(); if ($model->profile) { $profile = $model->profile; } else { $profile = Yii::createObject(SysUserProfileModel::className()); $profile->sys_user_id = $model->id; } $profile->realname = $realname; $profile->email = $email; $profile->mobile = $mobile; $profile->save(); $transaction->commit(); } catch (Exception $e) { Yii::$app->session->setFlash('danger', '数据保存失败,请重新操作'); $transaction->rollBack(); return $this->redirect(['index']); } Yii::$app->session->setFlash('success', '用户更新成功'); return $this->redirect(['index']); } /** * 根据主键查找模型 */ protected function findModel($id) { $user = Yii::createObject(SysUserModel::className()); if (($model = $user::findOne($id)) !== null) { return $model; } else { throw new NotFoundHttpException('访问页面不存在'); } } /** * 启用或禁用 */ public function actionEnable($id) { $model = $this->findModel($id); $model->is_enable = ($model->is_enable == 1) ? 0 : 1; $model->save(); Yii::$app->session->setFlash('success', '用户更新成功'); return $this->redirect(['index']); } /** * 设置角色界面 */ public function actionSetRole($id) { $model = $this->findModel($id); $auth = Yii::$app->authManager; $selectedRoles = $auth->getRolesByUser($id); $roles = $auth->getRoles(); return $this->render('set_role', [ 'model' => $model, 'roles' => $roles, 'selectedRoles' => $selectedRoles ]); } /** * 执行设置角色动作 */ public function actionDoSetRole($id) { $auth = Yii::$app->authManager; $post = Yii::$app->request->post(); // 解除所有角色 $auth->revokeAll($id); if (!empty($post['roles'])) { foreach ($post['roles'] as $roleId) { $role = $auth->getRole($roleId); $auth->assign($role, $id); } } Yii::$app->session->setFlash('success', '角色添加完成'); return $this->redirect(['index']); } }