authManager = \Yii::$app->authManager; } public function beforeAction($action) { parent::beforeAction($action); // TODO: Change the autogenerated stub //验证权限 if ($this->actionCheckAuth()) { return true; } throw new ForbiddenHttpException(\Yii::t('yii', 'You are not allowed to perform this action.')); } /** * @doc-name 权限列表 * @doc-param int role_id 角色id * @doc-return mixed @List{AuthRule{id,pid,component-string-组件地址,title-string-权限名称,path-string-权限对应路由,redirect-string-跳转路由,icon-string-菜单图标,api_url-int-接口地址,status-int-权限状态1启用 0禁用} 规则列表 * @doc-return mixed @Pagination{total-int-总数量,totalPage-int-总页数,pageSize-int-每页条数} 分页数据 */ public function actionRuleList() { $get = \Yii::$app->request->get(); $this->requestValidate($get,[ ['role_id','required'] ]); if ($get['role_id']==UserRoleEnum::SUPER_ADMIN ){ $data=['217','218','219']; $AuthRule = AuthRule::find()->where(['hidden' => 0])->andWhere(['not in','id',$data])->asArray()->all(); }elseif($get['role_id']==UserRoleEnum::STORE_ADMIN){ $data=['219']; $AuthRule = AuthRule::find()->where(['hidden' => 0])->andWhere(['not in','id',$data])->asArray()->all(); }else{ $AuthRule = AuthRule::find()->where(['hidden' => 0])->asArray()->all(); } return ArrayHelper::list_to_tree($AuthRule, 'id', 'pid', 'children'); } /** * @doc-name 添加权限 * @doc-param int pid 父级id / optional * @doc-param string title 权限名称 * @doc-param string path 权限对应路由 * @doc-param string component 组件地址 / optional * @doc-param string redirect 跳转路由 / optional * @doc-param string icon 菜单图标 / optional * @doc-param string api_url 接口地址 / optional * @doc-param int status 权限状态 1启用 0 禁用 / optional */ public function actionAddRule() { if (\Yii::$app->request->isPost) { $data = \Yii::$app->request->post(); $this->requestValidate($data, [ [['pid', 'title', 'path', 'status'], 'required'], ]); $path = 'Admin/' . $data['path']; $path = explode('/', $path); foreach ($path as $value) { $v = ucfirst($value); $arr[] = $v; } $new_path = implode('/', $arr); $AuthRule = AuthRule::find()->where(['path' => $new_path])->one(); if ($AuthRule) throw new Exception('权限已存在'); $data['path'] = $new_path; $model = new AuthRule(); $model->setAttributes($data); if (!$model->saveOrFail()) { throw new Exception('添加失败' . array_values($model->getFirstErrors())[0]); } else { return ['添加成功']; } } throw new Exception('请求方式错误'); } /** * @doc-name 编辑权限 * @doc-param int id id * @doc-param int pid 父级id / optional * @doc-param string title 权限名称 * @doc-param string path 权限对应路由 * @doc-param string component 组件地址 / optional * @doc-param string redirect 跳转路由 / optional * @doc-param string icon 菜单图标 / optional * @doc-param string api_url 接口地址 / optional * @doc-param int status 权限状态 1启用 0 禁用 / optional */ public function actionEditRule() { if (\Yii::$app->request->isPost) { $data = \Yii::$app->request->post(); $this->requestValidate($data, [ ['id', 'required'], ]); $AuthRule = AuthRule::find()->where(['id' => $data['id']])->one(); if (!$AuthRule) throw new Exception('需要编辑的规则不存在'); $AuthRule->pid = $data['pid'] ?? $AuthRule->pid; $AuthRule->title = $data['title'] ?? $AuthRule->title; $AuthRule->path = $data['path'] ?? $AuthRule->path; $AuthRule->component = $data['component'] ?? $AuthRule->component; $AuthRule->redirect = $data['redirect'] ?? $AuthRule->redirect; $AuthRule->icon = $data['icon'] ?? $AuthRule->icon; $AuthRule->api_url = $data['api_url'] ?? $AuthRule->api_url; $AuthRule->status = $data['status'] ?? $AuthRule->status; if (!$AuthRule->saveOrFail()) { throw new Exception('编辑失败'); } return ['编辑成功']; } throw new Exception('请求方式错误'); } /** * @doc-name 删除权限 * @doc-param int id id */ public function actionDelRule() { $data = \Yii::$app->request->get(); $this->requestValidate($data, [ ['id', 'required'], ]); $id = AuthRule::find()->where(['id' => $data['id']])->one(); if (!$id) throw new Exception('所删除的权限不存在'); $t = \Yii::$app->db->beginTransaction(); try { //删除权限 $id->delete(); //删除角色的权限 AuthRole::deleteAll(['rule_id' => $id]); $t->commit(); return ['删除成功']; } catch (\Exception $e) { $t->rollBack(); throw new Exception($e->getMessage()); } } /** * @doc-name 角色列表 */ public function actionRoleList() { $data = \Yii::$app->request->get(); $query = Role::find()->where(['>','id',9]); $this->field = [ Role::class => [ 'id', 'name', 'role_code', 'description', 'authRole' => function ($a) { return AuthRole::find()->where(['role_id' => $a->id])->all(); } ] ]; return $this->create($query, $data); } /** * @doc-name 添加角色 * @doc-param string name 名字 * @doc-param string role_code * @doc-param string description 描述 */ public function actionAddRole() { $data = \Yii::$app->request->post(); $this->requestValidate($data, [ ['name', 'required'], ]); $role = Role::find()->where(['name' => $data['name']])->one(); if ($role) throw new Exception('角色已经存在'); $t = \Yii::$app->db->beginTransaction(); try { $model = new Role(); $model->name = $data['name']; $model->role_code = $data['role_code'] ?? ''; $model->description = $data['description'] ?? ''; $model->save(); $path = 'Admin/Menu/List'; $AuthRule = AuthRule::find()->where(['path' => $path])->one(); if (!$AuthRule) throw new Exception('菜单列表不存在'); //添加菜单列表权限 $AuthRole = AuthRole::find()->where(['role_id' => $model->id, 'rule_id' => $AuthRule->id])->one(); if (!$AuthRole) { $AuthRole = new AuthRole(); $AuthRole->role_id = $model->id; $AuthRole->rule_id = $AuthRule->id; $AuthRole->saveOrFail(); } $t->commit(); return ['添加成功']; } catch (\Exception $e) { $t->rollBack(); throw new Exception($e->getMessage()); } } /** * @doc-name 编辑角色 * @doc-param int id id * @doc-param string name 名字 * @doc-param string role_code * @doc-param string description 描述 */ public function actionEditRole() { if (\Yii::$app->request->isPost) { $data = \Yii::$app->request->post(); $this->requestValidate($data, [ ['id', 'required'], ]); $edit_role = Role::find()->where(['id' => $data['id']])->one(); if (!$edit_role) throw new Exception('角色不存在'); if (!empty($data['name'])) { $role = Role::find()->where(['name' => $data['name']])->andWhere(['!=', 'id', $data['id']])->one(); if ($role) { throw new Exception('角色已存在'); } } $edit_role->name = $data['name'] ?? $edit_role->name; $edit_role->role_code = $data['role_code'] ?? $edit_role->role_code; $edit_role->description = $data['description'] ?? $edit_role->description; if (!$edit_role->save()) { throw new Exception('编辑失败'); } return ['编辑成功']; } throw new Exception('请求方式错误'); } /** * @doc-name 删除角色 * @doc-param int id id */ public function actionDelRole() { $data = \Yii::$app->request->get(); $this->requestValidate($data, [ ['id', 'required'], ]); $role = Role::find()->where(['id' => $data['id']])->one(); if (!$role) throw new Exception('所删除的角色不存在'); $t = \Yii::$app->db->beginTransaction(); try { //删除权限 $role->delete(); //删除角色的权限 AuthRole::deleteAll(['role_id' => $role->id]); $t->commit(); return ['删除成功']; } catch (\Exception $e) { $t->rollBack(); throw new Exception($e->getMessage()); } } /** * @@doc-name 给角色添加权限 * @doc-param int role_id role_id * @doc-param int rule_id 权限id 1,2,3 * @doc-param int status 状态1启用 0禁用 */ public function actionRoleAddRule() { $data = \Yii::$app->request->post(); $this->requestValidate($data, [ [['role_id', 'rule_id', 'status'], 'required'], ]); $rule_id = explode(',', $data['rule_id']); $t = \Yii::$app->db->beginTransaction(); try { foreach ($rule_id as $value) { $AuthRole = AuthRole::find()->where(['rule_id' => $value, 'role_id' => $data['role_id']])->one(); if (!$AuthRole) { $AuthRole = new AuthRole(); $AuthRole->role_id = $data['role_id']; $AuthRole->rule_id = $value; $AuthRole->status = $data['status']; $AuthRole->saveOrFail(); } } $t->commit(); return ['添加成功']; } catch (\Exception $e) { $t->rollBack(); throw new Exception($e->getMessage()); } } /** * @@doc-name 给角色修改权限 * @doc-param int role_id role_id * @doc-param int rule_id 权限id 1,2,3,4,5 * @doc-param int status 状态1启用 0禁用 */ public function actionRoleEditRule() { $data = \Yii::$app->request->post(); $this->requestValidate($data, [ [['role_id', 'rule_id', 'status'], 'required'], ]); $rule_id = explode(',', $data['rule_id']); $t = \Yii::$app->db->beginTransaction(); try { foreach ($rule_id as $value) { $AuthRole = AuthRole::find()->where(['rule_id' => $value, 'role_id' => $data['role_id']])->one(); if (!$AuthRole) { $AuthRole = new AuthRole(); $AuthRole->role_id = $data['role_id']; $AuthRole->rule_id = $value; $AuthRole->status = $data['status']; $AuthRole->saveOrFail(); } } $all_rule_id = AuthRole::find()->select(['rule_id'])->where(['role_id' => $data['role_id']])->column(); $arr = array_diff($all_rule_id, $rule_id); // if ($data['role_id']!=UserRoleEnum::SUPER_ADMIN){ foreach ($arr as $val) { $AuthRole = AuthRole::find()->where(['role_id' => $data['role_id'], 'rule_id' => $val])->one(); if ($AuthRole) { $AuthRole->delete(); } } // } $t->commit(); return ['修改成功']; } catch (\Exception $e) { $t->rollBack(); throw new Exception($e->getMessage()); } } /** * @@doc-name 给角色删除权限 * @doc-param int id id */ public function actionRoleDelRule() { $data = \Yii::$app->request->get(); $this->requestValidate($data, [ ['id', 'required'], ]); $AuthRole = AuthRole::find()->where(['id' => $data['id']])->one(); if (!$AuthRole) throw new Exception('该权限不存在'); $AuthRole->delete(); return ['删除成功']; } /** * @doc-name 查看角色权限 * @doc-param int role_id 角色ID * @doc-return mixed @List{id,role_id,rule_id,rule-string-权限} 查看角色权限列表 */ public function actionQueryRoleRule() { $data = \Yii::$app->request->get(); $this->requestValidate($data, [ ['role_id', 'required'], ]); $query = AuthRole::find()->where(['role_id' => $data['role_id']]); $this->field = [ AuthRole::class => [ 'id', 'role_id', 'rule_id', 'rule' => 'authRule.title' ] ]; return $this->create($query, $data); } /** * @doc-name 账号修改角色 * @doc-param string mobile 手机号 * @doc-param int role 角色 */ public function actionAccountEditRole() { $data = \Yii::$app->request->get(); $this->requestValidate($data, [ [['mobile', 'role'], 'required'], ]); $Admin = Admin::find()->where(['mobile' => $data['mobile']])->one(); if (!$Admin) { throw new Exception('账号不存在'); } $role = Role::find()->where(['id' => $data['role']])->one(); if (!$role) throw new Exception('角色不存在'); $Admin->role = $data['role']; $Admin->saveOrFail(); return []; } }