user; $userId = $user->id; if($userId == 1){ return $next($request); } $roleUserList = RoleUserService::findAll(['user_id' => $userId]); $roleIds = collect($roleUserList)->pluck('role_id')->toArray(); $route = $request->route(); $currentUri = $route->defaults['permission_uri'] ?? ltrim($route->uri(), '/'); $lotteryPermission = $route->defaults['lottery_odds_permission'] ?? null; $requiresActiveButton = $lotteryPermission === 'write' || ($route->defaults['require_active_button'] ?? false); if ($lotteryPermission !== null) { $currentUri = match ($request->input('game')) { 'lhc' => $lotteryPermission === 'read' ? 'admin/lhcNumber/list' : 'admin/lhcNumber/setOdds', 'canada28', 'jisu28' => $lotteryPermission === 'read' ? 'admin/gameplayRule' : 'admin/gameplayRule/submit', 'jisu', null => $lotteryPermission === 'read' ? 'admin/jisuGame/list' : 'admin/jisuGame/setOdds', default => $lotteryPermission === 'read' ? 'admin/jisuGame/list' : null, }; } if ($currentUri === null) { return $this->denied(); } if (!$requiresActiveButton) { $menu = MenuService::findOne(['uri' => $currentUri, 'type' => Menu::TYPE_BUTTON, 'status' => Menu::STATUS_SHOW]); if (!$menu) { return $next($request); } } $roles = RoleService::model()::with(['menus' => function ($query) use ($requiresActiveButton) { $query->where('type', Menu::TYPE_BUTTON); if ($requiresActiveButton) { $query->where('status', Menu::STATUS_SHOW); } }])->whereIn('id', $roleIds)->get(); foreach ($roles as $role) { if (in_array($currentUri, $role->menus_uris, $requiresActiveButton)) { return $next($request); } } return $this->denied(); } private function denied(): JsonResponse { return response()->json([ 'code' => -1, 'timestamp' => time(), 'msg' => '无权限访问', 'data' => [], ]); } }