*/ class AdminController extends BaseAdminController { public $modelClass = Admin::class; public $roles; public $login_role; /** * --------------------------------------- * 构造方法 * --------------------------------------- */ public function init() { parent::init(); } // //public function beforeAction($action) //{ // $user_id = Yii::$app->user->identity->getId(); // $login_role = Yii::$app->authManager->getRolesByUser($user_id); // $this->login_role = array_keys($login_role)[0]; // // if(Yii::$app->params['admin'] == Yii::$app->user->id){ // $roles = Yii::$app->authManager->getRoles(); // }else{ // $roles = Yii::$app->authManager->getChildRoles($this->login_role); // unset($roles[$this->login_role]); // } // $this->roles = $roles; // // $uid = Yii::$app->request->get('uid'); // if($uid){ // $assign = Yii::$app->authManager->getAssignments($uid); // $role = array_keys($assign)[0]; // //管理员只能管理下级管理员,不能管理同级和上级管理员 // if(!in_array($role,array_keys($roles))){ // throw new ForbiddenHttpException(Yii::t('yii', 'You are not allowed to perform this action.')); // } // } // return parent::beforeAction($action); // TODO: Change the autogenerated stub //} /** * --------------------------------------- * 后台用户列表 * @doc-param int type 1内部账号2客户账号 * @doc-param string search 搜索 / optional * @doc-return @List{is_sub-int-是否子账号0否1是} * --------------------------------------- */ public function actionIndex() { /* 添加当前位置到cookie供后续操作调用 */ // $this->setForward(); $admin = Yii::$app->user->identity; $get = Yii::$app->request->get(); $this->requestValidate($get,[ ['type','required','message'=>'类型不能为空'] ]); $query = Admin::find(); switch ($get['type']){ case 1: $query->andWhere(['<>','role',UserRoleEnum::STORE_ADMIN]); break; case 2: $query->andWhere(['role'=>UserRoleEnum::STORE_ADMIN]); break; default: throw new \yii\db\Exception('参数错误'); } if (UserRoleEnum::STORE_ADMIN == $admin->role) { $query->andWhere(['role' => UserRoleEnum::STORE_ADMIN, 'store_id' => $admin->store_id]); } if (!empty($get['search'])){ $query->andWhere([ 'or', ['mobile'=>$get['search']], ['like','username',$get['search']] ]); } $this->field = [ Admin::class => [ 'uid', 'username', 'password', 'mobile', 'store_id', 'store' => 'store.name', 'role_id' => 'role', 'role' => 'roles.name', 'is_sub','code','province_id','city_id', 'province'=>'province.name', 'city'=>'city.name', 'status' ] ]; return $this->create($query, $get); } /** * --------------------------------------- * 添加 * --------------------------------------- */ public function actionAdd() { $model = new Admin(); if (Yii::$app->request->isPost) { /* 表单验证 */ $data = Yii::$app->request->post('Admin'); $data['reg_time'] = time(); $data['reg_ip'] = ip2long(Yii::$app->request->getUserIP()); $data['last_login_time'] = 0; $data['last_login_ip'] = ip2long('127.0.0.1'); $data['update_time'] = 0; /* 表单数据加载和验证,具体验证规则在模型rule中配置 */ /* 密码单独验证,否则setPassword后密码肯定符合rule */ if (empty($data['password']) || strlen($data['password']) < 6) { $this->error('密码为空或小于6字符'); } $model->setAttributes($data); $model->generateAuthKey(); $model->setPassword($data['password']); if (!isset($data['role']) || !$data['role']) { $this->error('未选择任何角色'); } /* 保存用户数据到数据库 */ if ($model->save()) { /* 先删除 用户组-用户 记录 */ Yii::$app->authManager->revokeAll($model->uid); /* 再添加记录 */ $role = Yii::$app->authManager->getRole($data['role']); Yii::$app->authManager->assign($role, $model->uid); $this->success('操作成功', $this->getForward()); } else { $this->error('操作错误:' . array_values($model->getFirstErrors())[0]); } } //获取下属角色 $roles = array_map(function ($n) { return $n->name; }, $this->roles); $model->role = reset($roles); $model->status = 1; return $this->render('add', [ 'model' => $model, 'roles' => $roles ]); } /** * --------------------------------------- * 编辑 * --------------------------------------- */ public function actionEdit($uid) { $model = Admin::findOne($uid); if (Yii::$app->request->isPost) { /* 表单验证 */ $data = Yii::$app->request->post('Admin'); $data['update_time'] = time(); /* 如果设置密码则重置密码,否则不修改密码 */ if (!empty($data['password'])) { $model->generateAuthKey(); $model->setPassword($data['password']); } unset($data['password']); if (!isset($data['role']) || !$data['role']) { $this->error('未选择任何角色'); } $model->setAttributes($data); /* 保存用户数据到数据库 */ if ($model->save()) { /* 先删除 用户组-用户 记录 */ Yii::$app->authManager->revokeAll($model->uid); /* 再添加记录 */ $role = Yii::$app->authManager->getRole($data['role']); Yii::$app->authManager->assign($role, $model->uid); $this->success('操作成功', $this->getForward()); } else { $this->error('操作错误'); } } $roles = array_map(function ($n) { return $n->name; }, $this->roles); $assign = Yii::$app->authManager->getAssignments($model->uid); $model->role = array_keys($assign)[0]; $model->password = ''; return $this->render('edit', [ 'model' => $model, 'roles' => $roles ]); } /** * --------------------------------------- * 删除 * --------------------------------------- */ public function actionDelete() { $ids = Yii::$app->request->param('uid', 0); $ids = implode(',', array_unique((array)$ids)); if (empty($ids)) { $this->error('请选择要操作的数据!'); } /* 不能删除超级管理员 */ if (in_array(Yii::$app->params['admin'], explode(',', $ids))) { $this->error('不能删除超级管理员!'); } $_where = 'uid in(' . $ids . ')'; if (Admin::deleteAll($_where)) { foreach (explode(',', $ids) as $uid) { Yii::$app->authManager->revokeAll($uid); } $this->success('删除成功', $this->getForward()); } else { $this->error('删除失败!'); } } /** * 个人信息 */ public function actionPersonal() { $user_id = Yii::$app->user->identity->getId(); $model = Admin::findOne($user_id); if (Yii::$app->request->isPost) { /* 表单验证 */ $data = Yii::$app->request->post('Admin'); $data['update_time'] = time(); /* 如果设置密码则重置密码,否则不修改密码 */ if (!empty($data['password'])) { $model->generateAuthKey(); $model->setPassword($data['password']); } unset($data['password']); $model->setAttributes($data); /* 保存用户数据到数据库 */ if ($model->save()) { $this->success('操作成功', $this->getForward()); } else { $this->error('操作错误'); } } $model->password = ''; return $this->render('personal', [ 'model' => $model ]); } /** * 个人信息 */ public function actionEditPass() { $user_id = Yii::$app->user->identity->getId(); $model = Admin::findOne($user_id); /* 表单验证 */ $data = Yii::$app->request->post(); $data['update_time'] = time(); /* 如果设置密码则重置密码,否则不修改密码 */ if (isset($data['password']) && !empty($data['password'])) { if (strlen($data['password']) < 6) { throw new Exception('密码小于6字符'); } $model->generateAuthKey(); $model->setPassword($data['password']); } unset($data['password']); $model->setAttributes($data); /* 保存用户数据到数据库 */ $model->saveOrFail(); } private function createMenuNode($name, $icon, $url) { return ['app' => 'index', 'name' => $name, 'title' => null, 'icon' => $icon, 'url' => $url, 'route' => '', 'topic' => '', 'hidden' => false, 'target' => null]; } public function actionMyMenu() { $role = Yii::$app->user->identity->role; //角色1为官方管理,2为市场专员,3为客服,4为供应商管理,5为业务员,6为门店管理 if ($role == 1) { return ['list' => Yii::$app->params['menu']]; } else if ($role == 6) { return ['list' => Yii::$app->params['store_menu']]; } else if ($role == 5) { return ['list' => Yii::$app->params['agent_menu']]; } else if ($role == 4) { return ['list' => Yii::$app->params['supplier_menu']]; } } public function actionMenu() { if (Yii::$app->user->identity->is_sub === 1) { $userMenus = SubAccountMenu::findAll(['admin_id' => Yii::$app->user->identity->uid]); } else { $role = Yii::$app->user->identity->role; $userMenus = RoleMenu::findAll(['role_id' => $role]); } $keys = ArrayHelper::getColumn($userMenus, 'menuUrl'); $menus = Menu::find()->where(['in', 'menuUrl', $keys])->orderBy(['sort' => SORT_ASC])->asArray()->all(); return ArrayHelper::itemsMerge($menus, 0, 'menuUrl', 'parentPath', 'children'); ////当前用户menu //return ['list'=> Yii::$app->params['menu']]; } /** * --------------------------------------- * 用户授权 * --------------------------------------- */ // public function actionAuth($uid) // { // $auth = Yii::$app->authManager; // /* 获取用户信息 */ // $model = Admin::findOne($uid); // // if (Yii::$app->request->isPost) { // $data = Yii::$app->request->post(); // /* 用户权限组 */ // $item_name = $data['param']; // // /* 先删除 用户组-用户 记录 */ // $auth->revokeAll($uid); // /* 再添加记录 */ // $role = $auth->getRole($item_name); // $auth->assign($role, $uid); // // $this->success('授权成功!', $this->getForward()); // // var_dump($data['param']); // exit; // } // // /* 获取所有权限组 */ // $roles = $auth->getRoles(); // /* 获取该用户的权限 */ // $group = array_keys($auth->getAssignments($uid)); // //var_dump($group);exit; // // return $this->render('auth', [ // 'model' => $model, // 'roles' => $roles, // 'group' => $group // ]); // } }