first(); if (! $channel) { return false; } if ($channel->owner_uid !== $userId) { // 判断是否为协作 $power = ShareApi::getResPower($userId, $channel->uid, 2); if ($power < 20) { // 判断token if (! $accessToken) { return false; } $key = AccessToken::where('res_id', $channelId)->value('token'); if (! $key) { return false; } try { // access token 现在带 exp,过期会抛 ExpiredException; // 伪造/损坏的 token 同样抛异常。一律当作无权,不要冒泡成 500。 $jwt = JWT::decode($accessToken, new Key($key.$key, 'HS512')); } catch (\Exception $e) { return false; } if (isset($jwt->book) && $jwt->book !== 0 && $jwt->book !== $book) { return false; } } } return true; } }