post('channel_name'); $authType = AuthType::getValues(); $match = preg_match('/^private-(' . implode('|', $authType) . ')-(.+)$/', $channel_name, $matches); if (!$match) { return $this->fail('Forbidden'); } $header = $matches[1]; $AuthTypeAction = AuthType::get($header); $hash = $matches[2]; $has_authority = false; switch ($AuthTypeAction['action']) { case 'user': $uid = PluginUser::getUidByUser($hash); if ($uid != $request->uid) { return $this->fail('Forbidden'); } $PluginUser = PluginUser::where('id', $request->uid)->find(); $has_authority = $PluginUser && $PluginUser->state == State::YES['value']; break; case 'orders': $PluginFinanceOrders = PluginFinanceOrders::where('trade_no', $hash)->find(); if (!$PluginFinanceOrders) { return $this->fail('Forbidden'); } $has_authority = $PluginFinanceOrders->uid == $request->uid; break; case 'drama': $PluginShortplayDrama = PluginShortplayDrama::where(['id' => $hash, 'uid' => $request->uid])->find(); if (!$PluginShortplayDrama) { return $this->fail('Forbidden'); } $has_authority = true; break; } if ($has_authority) { return $this->resData(json_decode($pusher->socketAuth($channel_name, $request->post('socket_id')), true)); } else { return $this->fail('Forbidden'); } } }