* * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ declare(strict_types=1); namespace App\Controller; use App\Constants\ActiveStatusConst; use App\JsonRpc\RoleServiceInterface; use App\Repository\Company\CompanyModulesRepository; use App\Repository\Company\FirstCompanyRepository; use App\Request\RoleRequest; use App\Service\PermissionService; use Hyperf\Config\Annotation\Value; use Hyperf\Di\Annotation\Inject; use Hyperf\HttpMessage\Server\Response; use Hyperf\Validation\Annotation\Scene; class RoleController extends AbstractController { #[Inject] protected RoleServiceInterface $roleServiceInterface; #[Inject] protected PermissionService $permissionService; #[Inject] protected CompanyModulesRepository $companyModulesRepository; #[Inject] protected FirstCompanyRepository $firstCompanyRepository; #[Value('menu.data_permissions')] protected array $menuDataPermissions; /** * 添加角色. * @param RoleRequest $request * @return Response */ #[Scene(scene: 'addRole', argument: 'request')] public function addRole(RoleRequest $request): Response { $params = $request->all(); $data = [ 'token' => $this->token(), 'id' => $params['id'] ?? null, 'role_name' => $params['role_name'], 'active_status' => $params['active_status'], 'sort' => $params['sort'], ]; // 添加角色. $this->roleServiceInterface->addRole($data); return $this->apiResponse->success(); } /** * 角色列表. * @return Response */ public function roleList(): Response { $params = $this->request->all(); $data = [ 'token' => $this->token(), 'getPage' => $this->getPage(), 'params' => $params ]; $roleList = $this->roleServiceInterface->roleList($data); return $this->apiResponse->success($roleList); } /** * 禁用角色. * @param RoleRequest $request * @return Response */ #[Scene(scene: 'disableRoles', argument: 'request')] public function disableRoles(RoleRequest $request): Response { $params = $request->all(); $data = [ 'token' => $this->token(), 'params' => $params, ]; $rpcResult = $this->roleServiceInterface->disableRoles($data); $status = $params['status'] ? ActiveStatusConst::getMessage(ActiveStatusConst::ACTIVE_ENABLE) : ActiveStatusConst::getMessage(ActiveStatusConst::ACTIVE_DISABLE); $res = $rpcResult['result'] ?? []; $this->opLogs('[' . $status . '角色]名称 ' . $res['role_name'] ?? ''); return $this->apiResponse->success($rpcResult); } /** * 删除角色. * @param RoleRequest $request * @return Response */ #[Scene(scene: 'delRoles', argument: 'request')] public function delRoles(RoleRequest $request): Response { $params = $request->all(); $data = [ 'token' => $this->token(), 'params' => $params, ]; $rpcResult = $this->roleServiceInterface->deletedRoles($data); $res = $rpcResult['result'] ?? ''; $this->opLogs('[删除角色]名称 ' . $res); return $this->apiResponse->success($rpcResult); } /** * 分配用户角色. * @param RoleRequest $request * @return Response */ #[Scene(scene: 'assignUserRoles', argument: 'request')] public function assignUserRoles(RoleRequest $request): Response { $params = $request->all(); $params['menu_data_permission'] = $this->menuDataPermissions; $data = [ 'token' => $this->token(), 'params' => $params, ]; $rpcResult = $this->roleServiceInterface->assignUserRoles($data); $res = $rpcResult['result'] ?? ''; $this->opLogs('[角色管理] 分配用户角色 ' . $res); return $this->apiResponse->success(); } /** * 角色授权 */ #[Scene(scene: 'assignRolePermissions', argument: 'request')] public function assignRolePermissions(RoleRequest $request): Response { $params = $request->all(); $data = [ 'token' => $this->token(), 'params' => $params ]; $rpcResult = $this->roleServiceInterface->assignRolePermissions($data); $res = $rpcResult['result'] ?? []; $this->opLogs('[角色授权]' . $res['role_name'] . ': 权限集 ' . implode(',', $res['actions'])); return $this->apiResponse->success(); } /** * 角色权限列表 * @param RoleRequest $request * @return Response */ #[Scene(scene: 'roleChecked', argument: 'request')] public function roleChecked(RoleRequest $request): Response { $params = [ 'token' => $this->token(), 'params' => $request->all() ]; $rpcResult = $this->roleServiceInterface->getRolePermissionsByRoleId($params); $res = $rpcResult['result'] ?? []; $menu = $this->permissionService->checkMenu($res); return $this->apiResponse->success($menu); } /** * 公司功能模块授权. * @param RoleRequest $request * @return Response */ #[Scene(scene: 'addCompanyModule', argument: 'request')] public function addCompanyModule(RoleRequest $request): Response { $params = $request->all(); $companyInfo = $this->firstCompanyRepository->getCompanyById($params['company_id']); $res = $this->companyModulesRepository->addModule($params); $menuName = array_column($res['module_data_permissions'] ?? [], 'title'); $this->opLogs('[授权公司功能模块]' . $companyInfo['full_name'] . ' : ' . implode(',', $menuName)); return $this->apiResponse->success(); } /** * 公司功能模块列表. * @param RoleRequest $request * @return Response */ #[Scene(scene: 'companyChecked', argument: 'request')] public function companyChecked(RoleRequest $request): Response { $companyId = $request->input('company_id', 0); $moduleList = $this->companyModulesRepository->codeList($companyId); $menu = $this->permissionService->checkMenu($moduleList); return $this->apiResponse->success($menu); } }