orderBy('sort') ->orderBy('id') ->get(['id', 'name', 'path', 'icon', 'parent_id', 'sort', 'is_visible']); $roles = ['super_admin', 'venue_admin']; $permissionRows = RoleMenuPermission::query() ->whereIn('role', $roles) ->get(['role', 'menu_id']) ->groupBy('role') ->map(fn ($group) => $group->pluck('menu_id')->map(fn ($id) => (int) $id)->values()) ->toArray(); return response()->json([ 'menus' => $menus, 'roles' => [ ['role' => 'super_admin', 'label' => '超级管理员', 'menu_ids' => $permissionRows['super_admin'] ?? []], ['role' => 'venue_admin', 'label' => '场馆管理员', 'menu_ids' => $permissionRows['venue_admin'] ?? []], ], ]); } public function update(Request $request, string $role): JsonResponse { $this->ensureSuperAdmin($request); abort_unless(in_array($role, ['super_admin', 'venue_admin'], true), 422, '不支持的角色'); $data = $request->validate([ 'menu_ids' => ['required', 'array'], 'menu_ids.*' => ['integer', 'exists:admin_menus,id'], ]); $menuIds = collect($data['menu_ids'])->map(fn ($id) => (int) $id)->unique()->values(); DB::transaction(function () use ($role, $menuIds) { RoleMenuPermission::query()->where('role', $role)->delete(); foreach ($menuIds as $menuId) { RoleMenuPermission::create([ 'role' => $role, 'menu_id' => $menuId, ]); } }); return response()->json(['message' => '角色菜单权限已保存']); } private function ensureSuperAdmin(Request $request): void { abort_unless($request->user()?->isSuperAdmin(), 403, '仅超级管理员可操作'); } }