request; /** * 组织SQL */ $roleQuery = new Query(); $roleQuery->select(['auth_role.*']); $roleQuery->from('auth_role'); /** * 过滤 */ $get = []; $keyword = $request->get("keyword"); if ($keyword) { $roleQuery->FilterWhere(['or', ['like','name', $keyword], ]); } $get['keyword'] = $keyword; /** * 分页处理 */ $pageSize = $request->get("pageSize") ? (int) $request->get("pageSize") : 20; $pages = new Pagination(['totalCount' => $roleQuery->count(), 'pageSize' => $pageSize]); $roles = $roleQuery->offset($pages->offset)->limit($pages->limit)->all(); /** * 数据整理 */ $data = []; $auth = Yii::$app->authManager; foreach ($roles as $role) { $perms = []; foreach ($auth->getPermsByRole($role['role_id']) as $perm) { $perms[] = $perm->name; } $perms = implode(',', $perms); $data[] = [ 'id' => $role['role_id'], 'name' => $role['name'], 'description' => $role['description'], 'perms' => $perms, ]; } /** * 渲染模板 */ return $this->render('index', [ 'roles' => $data, 'pages' => $pages, 'get' => $get, ]); } /** * 新增界面 */ public function actionCreate() { return $this->render('create'); } /** * 新增执行动作 */ public function actionDoAdd() { $post = Yii::$app->request->post(); if (empty($post)) { return; } $roleName = isset($post['name']) ? $post['name'] : ''; $description = isset($post['description']) ? $post['description'] : ''; $roleName = trim($roleName); $description = trim($description); $transaction = Yii::$app->db->beginTransaction(); try { $auth = Yii::$app->authManager; $role = $auth->createRole($roleName); $role->description = $description; $addResult = $auth->addRole($role); if ($addResult) { $transaction->commit(); Yii::$app->session->setFlash('success', '角色添加完成'); // 重置缓存 Yii::$app->authManager->invalidateCache(); } else { $transaction->rollBack(); Yii::$app->session->setFlash('danger', '角色添加失败,可能重名'); } } catch (Exception $e) { Yii::$app->session->setFlash('danger', '数据保存失败,请重新操作'); $transaction->rollBack(); return $this->redirect(['/mall/role/create']); } return $this->redirect(['index']); } /** * 更新界面 */ public function actionUpdate($id) { $role = Yii::$app->authManager->getRole($id); $supperRoleName = DbManager::SUPPER_ADMIN_NAME; return $this->render('update', [ 'role' => $role, 'supperRoleName' => $supperRoleName ]); } /** * 更新执行动作 */ public function actionDoUpdate($id) { $post = Yii::$app->request->post(); if (empty($post)) { return; } $roleName = isset($post['name']) ? $post['name'] : ''; $description = isset($post['description']) ? $post['description'] : ''; $roleName = trim($roleName); $description = trim($description); $authManager = Yii::$app->authManager; $role = $authManager->getRole($id); $existRole = $authManager->getRoleByName($roleName); if ($role && $existRole && $role->roleId != $existRole->roleId) { Yii::$app->session->setFlash('danger', '角色名称已存在,请改其他名称'); return $this->redirect(['index']); } $transaction = Yii::$app->db->beginTransaction(); try { $role->name = $roleName; $role->description = $description; $authManager->updateRole($id, $role); $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']); } /** * 更新执行动作 */ public function actionDelete($id) { $role = Yii::$app->authManager->getRole($id); Yii::$app->authManager->removeRole($role); Yii::$app->session->setFlash('success', '角色删除完成'); return $this->redirect(['index']); } /** * 分配权限界面 */ public function actionSetPermission($id) { $auth = Yii::$app->authManager; $role = $auth->getRole($id); $selected = $auth->getPermsByRole($id); $modules = Yii::$app->modules; $permission = []; foreach ($modules as $name => $class) { $module = Yii::$app->getModule($name); if (!empty($module->params['perm'])) { $permission[$name] = $module->params['perm']; } } return $this->render('set_permission', [ 'role' => $role, 'permission' => $permission, 'selected' => $selected ]); } /** * 执行分配权限动作 */ public function actionDoSetPermission($id) { $post = Yii::$app->request->post(); $auth = Yii::$app->authManager; $role = $auth->getRole($id); if (empty($post['permission'])) { // 删除角色所有权限 $auth->setRolePerms($id); Yii::$app->session->setFlash('success', '权限设置完成'); return $this->redirect(['index']); } $transaction = Yii::$app->db->beginTransaction(); try { $perms = implode(',', $post['permission']); $auth->setRolePerms($id, $perms); $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']); } /** * @param $id * @return string */ public function actionAssignPermission($id) { $auth = Yii::$app->authManager; $role = $auth->getRole($id); $selected = $auth->getPermsByRole($id); $confirmRouters = AuthPermRepository::getPermsRouters('perm_id >0'); $modulesArr = AuthPermRepository::getGroupPermsRouters($confirmRouters); return $this->render('assign_permission', [ 'role' => $role, 'permission' => $modulesArr, 'selected' => $selected ]); } }