Browse Source

update: new auth

tokumeikoi 2 năm trước cách đây
mục cha
commit
adf465696a

+ 0 - 53
app/Console/Commands/CheckUser.php

@@ -1,53 +0,0 @@
-<?php
-
-namespace App\Console\Commands;
-
-use App\Models\User;
-use Illuminate\Console\Command;
-
-class CheckUser extends Command
-{
-    /**
-     * The name and signature of the console command.
-     *
-     * @var string
-     */
-    protected $signature = 'check:user';
-
-    /**
-     * The console command description.
-     *
-     * @var string
-     */
-    protected $description = '用户检查任务';
-
-    /**
-     * Create a new command instance.
-     *
-     * @return void
-     */
-    public function __construct()
-    {
-        parent::__construct();
-    }
-
-    /**
-     * Execute the console command.
-     *
-     * @return mixed
-     */
-    public function handle()
-    {
-        $this->resetExpiredUserPlan();
-    }
-
-    private function resetExpiredUserPlan($day = 14)
-    {
-        User::where('expired_at', '<', $day * 86400)
-            ->whereNotNull('expired_at')
-            ->update([
-            'plan_id' => NULL,
-            'group_id' => NULL
-        ]);
-    }
-}

+ 0 - 1
app/Console/Kernel.php

@@ -33,7 +33,6 @@ class Kernel extends ConsoleKernel
         $schedule->command('check:order')->everyMinute();
         $schedule->command('check:commission')->everyMinute();
         $schedule->command('check:ticket')->everyMinute();
-        $schedule->command('check:user')->daily();
         // reset
         $schedule->command('reset:traffic')->daily();
         $schedule->command('reset:log')->daily();

+ 1 - 1
app/Http/Controllers/Admin/ConfigController.php

@@ -39,7 +39,7 @@ class ConfigController extends Controller
     public function testSendMail(Request $request)
     {
         $obj = new SendEmailJob([
-            'email' => $request->user->email,
+            'email' => $request->user['email'],
             'subject' => 'This is v2board test email',
             'template_name' => 'notify',
             'template_value' => [

+ 2 - 11
app/Http/Controllers/Admin/PlanController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin;
 use App\Http\Requests\Admin\PlanSave;
 use App\Http\Requests\Admin\PlanSort;
 use App\Http\Requests\Admin\PlanUpdate;
+use App\Services\PlanService;
 use Illuminate\Http\Request;
 use App\Http\Controllers\Controller;
 use App\Models\Plan;
@@ -16,17 +17,7 @@ class PlanController extends Controller
 {
     public function fetch(Request $request)
     {
-        $counts = User::select(
-            DB::raw("plan_id"),
-            DB::raw("count(*) as count")
-        )
-            ->where('plan_id', '!=', NULL)
-            ->where(function ($query) {
-                $query->where('expired_at', '>=', time())
-                    ->orWhere('expired_at', NULL);
-            })
-            ->groupBy("plan_id")
-            ->get();
+        $counts = PlanService::countActiveUsers();
         $plans = Plan::orderBy('sort', 'ASC')->get();
         foreach ($plans as $k => $v) {
             $plans[$k]->count = 0;

+ 1 - 1
app/Http/Controllers/Admin/TicketController.php

@@ -68,7 +68,7 @@ class TicketController extends Controller
         $ticketService->replyByAdmin(
             $request->input('id'),
             $request->input('message'),
-            $request->user->id
+            $request->user['id']
         );
         return response([
             'data' => true

+ 1 - 1
app/Http/Controllers/Staff/TicketController.php

@@ -57,7 +57,7 @@ class TicketController extends Controller
         $ticketService->replyByAdmin(
             $request->input('id'),
             $request->input('message'),
-            $request->user->id
+            $request->user['id']
         );
         return response([
             'data' => true

+ 1 - 1
app/Http/Controllers/User/CouponController.php

@@ -16,7 +16,7 @@ class CouponController extends Controller
         }
         $couponService = new CouponService($request->input('code'));
         $couponService->setPlanId($request->input('plan_id'));
-        $couponService->setUserId($request->user->id);
+        $couponService->setUserId($request->user['id']);
         $couponService->check();
         return response([
             'data' => $couponService->getCoupon()

+ 8 - 8
app/Http/Controllers/User/InviteController.php

@@ -14,11 +14,11 @@ class InviteController extends Controller
 {
     public function save(Request $request)
     {
-        if (InviteCode::where('user_id', $request->user->id)->where('status', 0)->count() >= config('v2board.invite_gen_limit', 5)) {
+        if (InviteCode::where('user_id', $request->user['id'])->where('status', 0)->count() >= config('v2board.invite_gen_limit', 5)) {
             abort(500, __('The maximum number of creations has been reached'));
         }
         $inviteCode = new InviteCode();
-        $inviteCode->user_id = $request->user->id;
+        $inviteCode->user_id = $request->user['id'];
         $inviteCode->code = Helper::randomChar(8);
         return response([
             'data' => $inviteCode->save()
@@ -28,7 +28,7 @@ class InviteController extends Controller
     public function details(Request $request)
     {
         return response([
-            'data' => CommissionLog::where('invite_user_id', $request->user->id)
+            'data' => CommissionLog::where('invite_user_id', $request->user['id'])
                 ->where('get_amount', '>', 0)
                 ->select([
                     'id',
@@ -43,26 +43,26 @@ class InviteController extends Controller
 
     public function fetch(Request $request)
     {
-        $codes = InviteCode::where('user_id', $request->user->id)
+        $codes = InviteCode::where('user_id', $request->user['id'])
             ->where('status', 0)
             ->get();
         $commission_rate = config('v2board.invite_commission', 10);
-        $user = User::find($request->user->id);
+        $user = User::find($request->user['id']);
         if ($user->commission_rate) {
             $commission_rate = $user->commission_rate;
         }
         $stat = [
             //已注册用户数
-            (int)User::where('invite_user_id', $request->user->id)->count(),
+            (int)User::where('invite_user_id', $request->user['id'])->count(),
             //有效的佣金
             (int)Order::where('status', 3)
                 ->where('commission_status', 2)
-                ->where('invite_user_id', $request->user->id)
+                ->where('invite_user_id', $request->user['id'])
                 ->sum('commission_balance'),
             //确认中的佣金
             (int)Order::where('status', 3)
                 ->where('commission_status', 0)
-                ->where('invite_user_id', $request->user->id)
+                ->where('invite_user_id', $request->user['id'])
                 ->sum('commission_balance'),
             //佣金比例
             (int)$commission_rate,

+ 2 - 7
app/Http/Controllers/User/KnowledgeController.php

@@ -19,14 +19,9 @@ class KnowledgeController extends Controller
                 ->first()
                 ->toArray();
             if (!$knowledge) abort(500, __('Article does not exist'));
-            $user = User::find($request->user->id);
+            $user = User::find($request->user['id']);
             $userService = new UserService();
-            if ($userService->isAvailable($user)) {
-                $appleId = config('v2board.apple_id');
-                $appleIdPassword = config('v2board.apple_id_password');
-            } else {
-                $appleId = __('No active subscription. Unable to use our provided Apple ID');
-                $appleIdPassword = __('No active subscription. Unable to use our provided Apple ID');
+            if (!$userService->isAvailable($user)) {
                 $this->formatAccessData($knowledge['body']);
             }
             $subscribeUrl = Helper::getSubscribeUrl("/api/v1/client/subscribe?token={$user['token']}");

+ 9 - 9
app/Http/Controllers/User/OrderController.php

@@ -29,7 +29,7 @@ class OrderController extends Controller
 {
     public function fetch(Request $request)
     {
-        $model = Order::where('user_id', $request->user->id)
+        $model = Order::where('user_id', $request->user['id'])
             ->orderBy('created_at', 'DESC');
         if ($request->input('status') !== null) {
             $model->where('status', $request->input('status'));
@@ -50,7 +50,7 @@ class OrderController extends Controller
 
     public function detail(Request $request)
     {
-        $order = Order::where('user_id', $request->user->id)
+        $order = Order::where('user_id', $request->user['id'])
             ->where('trade_no', $request->input('trade_no'))
             ->first();
         if (!$order) {
@@ -72,14 +72,14 @@ class OrderController extends Controller
     public function save(OrderSave $request)
     {
         $userService = new UserService();
-        if ($userService->isNotCompleteOrderByUserId($request->user->id)) {
+        if ($userService->isNotCompleteOrderByUserId($request->user['id'])) {
             abort(500, __('You have an unpaid or pending order, please try again later or cancel it'));
         }
 
         $planService = new PlanService($request->input('plan_id'));
 
         $plan = $planService->plan;
-        $user = User::find($request->user->id);
+        $user = User::find($request->user['id']);
 
         if (!$plan) {
             abort(500, __('Subscription plan does not exist'));
@@ -94,7 +94,7 @@ class OrderController extends Controller
         }
 
         if ($request->input('period') === 'reset_price') {
-            if (!$user->plan_id) {
+            if (!$user->plan_id || $user->expired_at < time() || $user->expired_at !== NULL) {
                 abort(500, __('Subscription has expired or no active subscription, unable to purchase Data Reset Package'));
             } else {
                 if ($user->plan_id !== $plan->id) {
@@ -121,7 +121,7 @@ class OrderController extends Controller
         DB::beginTransaction();
         $order = new Order();
         $orderService = new OrderService($order);
-        $order->user_id = $request->user->id;
+        $order->user_id = $request->user['id'];
         $order->plan_id = $plan->id;
         $order->period = $request->input('period');
         $order->trade_no = Helper::generateOrderNo();
@@ -177,7 +177,7 @@ class OrderController extends Controller
         $tradeNo = $request->input('trade_no');
         $method = $request->input('method');
         $order = Order::where('trade_no', $tradeNo)
-            ->where('user_id', $request->user->id)
+            ->where('user_id', $request->user['id'])
             ->where('status', 0)
             ->first();
         if (!$order) {
@@ -216,7 +216,7 @@ class OrderController extends Controller
     {
         $tradeNo = $request->input('trade_no');
         $order = Order::where('trade_no', $tradeNo)
-            ->where('user_id', $request->user->id)
+            ->where('user_id', $request->user['id'])
             ->first();
         if (!$order) {
             abort(500, __('Order does not exist'));
@@ -249,7 +249,7 @@ class OrderController extends Controller
             abort(500, __('Invalid parameter'));
         }
         $order = Order::where('trade_no', $request->input('trade_no'))
-            ->where('user_id', $request->user->id)
+            ->where('user_id', $request->user['id'])
             ->first();
         if (!$order) {
             abort(500, __('Order does not exist'));

+ 8 - 20
app/Http/Controllers/User/PlanController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers\User;
 
 use App\Http\Controllers\Controller;
 use App\Models\User;
+use App\Services\PlanService;
 use Illuminate\Http\Request;
 use App\Models\Plan;
 use Illuminate\Support\Facades\DB;
@@ -12,7 +13,7 @@ class PlanController extends Controller
 {
     public function fetch(Request $request)
     {
-        $user = User::find($request->user->id);
+        $user = User::find($request->user['id']);
         if ($request->input('id')) {
             $plan = Plan::where('id', $request->input('id'))->first();
             if (!$plan) {
@@ -24,29 +25,16 @@ class PlanController extends Controller
             return response([
                 'data' => $plan
             ]);
-        } else {
-            $counts = User::select(
-                DB::raw("plan_id"),
-                DB::raw("count(*) as count")
-            )
-                ->where('plan_id', '!=', NULL)
-                ->where(function ($query) {
-                    $query->where('expired_at', '>=', time())
-                        ->orWhere('expired_at', NULL);
-                })
-                ->groupBy("plan_id")
-                ->get()
-                ->keyBy('plan_id');
         }
+
+        $counts = PlanService::countActiveUsers();
         $plans = Plan::where('show', 1)
             ->orderBy('sort', 'ASC')
             ->get();
-        if (isset($counts)) {
-            foreach ($plans as $k => $v) {
-                if ($plans[$k]->capacity_limit === NULL) continue;
-                if (!isset($counts[$plans[$k]->id])) continue;
-                $plans[$k]->capacity_limit = $plans[$k]->capacity_limit - $counts[$plans[$k]->id]->count;
-            }
+        foreach ($plans as $k => $v) {
+            if ($plans[$k]->capacity_limit === NULL) continue;
+            if (!isset($counts[$plans[$k]->id])) continue;
+            $plans[$k]->capacity_limit = $plans[$k]->capacity_limit - $counts[$plans[$k]->id]->count;
         }
         return response([
             'data' => $plans

+ 1 - 1
app/Http/Controllers/User/ServerController.php

@@ -19,7 +19,7 @@ class ServerController extends Controller
 {
     public function fetch(Request $request)
     {
-        $user = User::find($request->user->id);
+        $user = User::find($request->user['id']);
         $servers = [];
         $userService = new UserService();
         if ($userService->isAvailable($user)) {

+ 1 - 1
app/Http/Controllers/User/StatController.php

@@ -18,7 +18,7 @@ class StatController extends Controller
             'user_id',
             'server_rate'
         ])
-            ->where('user_id', $request->user->id)
+            ->where('user_id', $request->user['id'])
             ->where('record_at', '>=', strtotime(date('Y-m-1')))
             ->orderBy('record_at', 'DESC');
         return response([

+ 1 - 1
app/Http/Controllers/User/TelegramController.php

@@ -22,6 +22,6 @@ class TelegramController extends Controller
 
     public function unbind(Request $request)
     {
-        $user = User::where('user_id', $request->user->id)->first();
+        $user = User::where('user_id', $request->user['id'])->first();
     }
 }

+ 12 - 12
app/Http/Controllers/User/TicketController.php

@@ -21,7 +21,7 @@ class TicketController extends Controller
     {
         if ($request->input('id')) {
             $ticket = Ticket::where('id', $request->input('id'))
-                ->where('user_id', $request->user->id)
+                ->where('user_id', $request->user['id'])
                 ->first();
             if (!$ticket) {
                 abort(500, __('Ticket does not exist'));
@@ -38,7 +38,7 @@ class TicketController extends Controller
                 'data' => $ticket
             ]);
         }
-        $ticket = Ticket::where('user_id', $request->user->id)
+        $ticket = Ticket::where('user_id', $request->user['id'])
             ->orderBy('created_at', 'DESC')
             ->get();
         return response([
@@ -49,21 +49,21 @@ class TicketController extends Controller
     public function save(TicketSave $request)
     {
         DB::beginTransaction();
-        if ((int)Ticket::where('status', 0)->where('user_id', $request->user->id)->lockForUpdate()->count()) {
+        if ((int)Ticket::where('status', 0)->where('user_id', $request->user['id'])->lockForUpdate()->count()) {
             abort(500, __('There are other unresolved tickets'));
         }
         $ticket = Ticket::create(array_merge($request->only([
             'subject',
             'level'
         ]), [
-            'user_id' => $request->user->id
+            'user_id' => $request->user['id']
         ]));
         if (!$ticket) {
             DB::rollback();
             abort(500, __('Failed to open ticket'));
         }
         $ticketMessage = TicketMessage::create([
-            'user_id' => $request->user->id,
+            'user_id' => $request->user['id'],
             'ticket_id' => $ticket->id,
             'message' => $request->input('message')
         ]);
@@ -87,7 +87,7 @@ class TicketController extends Controller
             abort(500, __('Message cannot be empty'));
         }
         $ticket = Ticket::where('id', $request->input('id'))
-            ->where('user_id', $request->user->id)
+            ->where('user_id', $request->user['id'])
             ->first();
         if (!$ticket) {
             abort(500, __('Ticket does not exist'));
@@ -95,14 +95,14 @@ class TicketController extends Controller
         if ($ticket->status) {
             abort(500, __('The ticket is closed and cannot be replied'));
         }
-        if ($request->user->id == $this->getLastMessage($ticket->id)->user_id) {
+        if ($request->user['id'] == $this->getLastMessage($ticket->id)->user_id) {
             abort(500, __('Please wait for the technical enginneer to reply'));
         }
         $ticketService = new TicketService();
         if (!$ticketService->reply(
             $ticket,
             $request->input('message'),
-            $request->user->id
+            $request->user['id']
         )) {
             abort(500, __('Ticket reply failed'));
         }
@@ -119,7 +119,7 @@ class TicketController extends Controller
             abort(500, __('Invalid parameter'));
         }
         $ticket = Ticket::where('id', $request->input('id'))
-            ->where('user_id', $request->user->id)
+            ->where('user_id', $request->user['id'])
             ->first();
         if (!$ticket) {
             abort(500, __('Ticket does not exist'));
@@ -154,7 +154,7 @@ class TicketController extends Controller
         )) {
             abort(500, __('Unsupported withdrawal method'));
         }
-        $user = User::find($request->user->id);
+        $user = User::find($request->user['id']);
         $limit = config('v2board.commission_withdraw_limit', 100);
         if ($limit > ($user->commission_balance / 100)) {
             abort(500, __('The current required minimum withdrawal commission is :limit', ['limit' => $limit]));
@@ -164,7 +164,7 @@ class TicketController extends Controller
         $ticket = Ticket::create([
             'subject' => $subject,
             'level' => 2,
-            'user_id' => $request->user->id
+            'user_id' => $request->user['id']
         ]);
         if (!$ticket) {
             DB::rollback();
@@ -175,7 +175,7 @@ class TicketController extends Controller
             __('Withdrawal account') . ":" . $request->input('withdraw_account')
         );
         $ticketMessage = TicketMessage::create([
-            'user_id' => $request->user->id,
+            'user_id' => $request->user['id'],
             'ticket_id' => $ticket->id,
             'message' => $message
         ]);

+ 12 - 12
app/Http/Controllers/User/UserController.php

@@ -21,9 +21,9 @@ class UserController extends Controller
     public function checkLogin(Request $request)
     {
         $data = [
-            'is_login' => $request->user->id ? true : false
+            'is_login' => $request->user['id'] ? true : false
         ];
-        if ($request->user->is_admin) {
+        if ($request->user['is_admin']) {
             $data['is_admin'] = true;
         }
         return response([
@@ -33,7 +33,7 @@ class UserController extends Controller
 
     public function changePassword(UserChangePassword $request)
     {
-        $user = User::find($request->user->id);
+        $user = User::find($request->user['id']);
         if (!$user) {
             abort(500, __('The user does not exist'));
         }
@@ -58,7 +58,7 @@ class UserController extends Controller
 
     public function info(Request $request)
     {
-        $user = User::where('id', $request->user->id)
+        $user = User::where('id', $request->user['id'])
             ->select([
                 'email',
                 'transfer_enable',
@@ -90,12 +90,12 @@ class UserController extends Controller
     {
         $stat = [
             Order::where('status', 0)
-                ->where('user_id', $request->user->id)
+                ->where('user_id', $request->user['id'])
                 ->count(),
             Ticket::where('status', 0)
-                ->where('user_id', $request->user->id)
+                ->where('user_id', $request->user['id'])
                 ->count(),
-            User::where('invite_user_id', $request->user->id)
+            User::where('invite_user_id', $request->user['id'])
                 ->count()
         ];
         return response([
@@ -105,7 +105,7 @@ class UserController extends Controller
 
     public function getSubscribe(Request $request)
     {
-        $user = User::where('id', $request->user->id)
+        $user = User::where('id', $request->user['id'])
             ->select([
                 'plan_id',
                 'token',
@@ -135,7 +135,7 @@ class UserController extends Controller
 
     public function resetSecurity(Request $request)
     {
-        $user = User::find($request->user->id);
+        $user = User::find($request->user['id']);
         if (!$user) {
             abort(500, __('The user does not exist'));
         }
@@ -156,7 +156,7 @@ class UserController extends Controller
             'remind_traffic'
         ]);
 
-        $user = User::find($request->user->id);
+        $user = User::find($request->user['id']);
         if (!$user) {
             abort(500, __('The user does not exist'));
         }
@@ -173,7 +173,7 @@ class UserController extends Controller
 
     public function transfer(UserTransfer $request)
     {
-        $user = User::find($request->user->id);
+        $user = User::find($request->user['id']);
         if (!$user) {
             abort(500, __('The user does not exist'));
         }
@@ -192,7 +192,7 @@ class UserController extends Controller
 
     public function getQuickLoginUrl(Request $request)
     {
-        $user = User::find($request->user->id);
+        $user = User::find($request->user['id']);
         if (!$user) {
             abort(500, __('The user does not exist'));
         }

+ 3 - 3
app/Http/Kernel.php

@@ -34,9 +34,9 @@ class Kernel extends HttpKernel
 //            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
 //            \Illuminate\Session\Middleware\StartSession::class,
             // \Illuminate\Session\Middleware\AuthenticateSession::class,
-            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
-            \App\Http\Middleware\VerifyCsrfToken::class,
-            \Illuminate\Routing\Middleware\SubstituteBindings::class,
+//            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
+//            \App\Http\Middleware\VerifyCsrfToken::class,
+//            \Illuminate\Routing\Middleware\SubstituteBindings::class,
         ],
 
         'api' => [

+ 17 - 8
app/Http/Middleware/Admin.php

@@ -3,7 +3,7 @@
 namespace App\Http\Middleware;
 
 use Closure;
-use Laravel\Horizon\Horizon;
+use Illuminate\Support\Facades\Cache;
 
 class Admin
 {
@@ -20,14 +20,23 @@ class Admin
         if (!$authorization) abort(403, '未登录或登陆已过期');
 
         $authData = explode(':', base64_decode($authorization));
-        if (!isset($authData[1]) || !isset($authData[0])) abort(403, '鉴权失败,请重新登入');
-        $user = \App\Models\User::where('password', $authData[1])
-            ->where('email', $authData[0])
-            ->first();
-        if (!$user) abort(403, '鉴权失败,请重新登入');
-        if (!$user->is_admin) abort(403, '未登录或登陆已过期');
+        if (!Cache::has($authorization)) {
+            if (!isset($authData[1]) || !isset($authData[0])) abort(403, '鉴权失败,请重新登入');
+            $user = \App\Models\User::where('password', $authData[1])
+                ->where('email', $authData[0])
+                ->select([
+                    'id',
+                    'email',
+                    'is_admin',
+                    'is_staff'
+                ])
+                ->first();
+            if (!$user) abort(403, '鉴权失败,请重新登入');
+            if (!$user->is_admin) abort(403, '鉴权失败,请重新登入');
+            Cache::put($authorization, $user->toArray(), 3600);
+        }
         $request->merge([
-            'user' => $user
+            'user' => Cache::get($authorization)
         ]);
         return $next($request);
     }

+ 17 - 7
app/Http/Middleware/Staff.php

@@ -3,6 +3,7 @@
 namespace App\Http\Middleware;
 
 use Closure;
+use Illuminate\Support\Facades\Cache;
 
 class Staff
 {
@@ -19,14 +20,23 @@ class Staff
         if (!$authorization) abort(403, '未登录或登陆已过期');
 
         $authData = explode(':', base64_decode($authorization));
-        if (!isset($authData[1]) || !isset($authData[0])) abort(403, '鉴权失败,请重新登入');
-        $user = \App\Models\User::where('password', $authData[1])
-            ->where('email', $authData[0])
-            ->first();
-        if (!$user) abort(403, '鉴权失败,请重新登入');
-        if (!$user->is_staff) abort(403, '未登录或登陆已过期');
+        if (!Cache::has($authorization)) {
+            if (!isset($authData[1]) || !isset($authData[0])) abort(403, '鉴权失败,请重新登入');
+            $user = \App\Models\User::where('password', $authData[1])
+                ->where('email', $authData[0])
+                ->select([
+                    'id',
+                    'email',
+                    'is_admin',
+                    'is_staff'
+                ])
+                ->first();
+            if (!$user) abort(403, '鉴权失败,请重新登入');
+            if (!$user->is_staff) abort(403, '鉴权失败,请重新登入');
+            Cache::put($authorization, $user->toArray(), 3600);
+        }
         $request->merge([
-            'user' => $user
+            'user' => Cache::get($authorization)
         ]);
         return $next($request);
     }

+ 16 - 7
app/Http/Middleware/User.php

@@ -2,8 +2,8 @@
 
 namespace App\Http\Middleware;
 
-use App\Utils\Helper;
 use Closure;
+use Illuminate\Support\Facades\Cache;
 
 class User
 {
@@ -20,13 +20,22 @@ class User
         if (!$authorization) abort(403, '未登录或登陆已过期');
 
         $authData = explode(':', base64_decode($authorization));
-        if (!isset($authData[1]) || !isset($authData[0])) abort(403, '鉴权失败,请重新登入');
-        $user = \App\Models\User::where('password', $authData[1])
-            ->where('email', $authData[0])
-            ->first();
-        if (!$user) abort(403, '鉴权失败,请重新登入');
+        if (!Cache::has($authorization)) {
+            if (!isset($authData[1]) || !isset($authData[0])) abort(403, '鉴权失败,请重新登入');
+            $user = \App\Models\User::where('password', $authData[1])
+                ->where('email', $authData[0])
+                ->select([
+                    'id',
+                    'email',
+                    'is_admin',
+                    'is_staff'
+                ])
+                ->first();
+            if (!$user) abort(403, '鉴权失败,请重新登入');
+            Cache::put($authorization, $user->toArray(), 3600);
+        }
         $request->merge([
-            'user' => $user
+            'user' => Cache::get($authorization)
         ]);
         return $next($request);
     }

+ 2 - 2
app/Jobs/StatServerJob.php

@@ -48,10 +48,10 @@ class StatServerJob implements ShouldQueue
             //
         }
 
-        $data = StatServer::where('record_at', $recordAt)
+        $data = StatServer::lockForUpdate()
+            ->where('record_at', $recordAt)
             ->where('server_id', $this->server->id)
             ->where('server_type', $this->protocol)
-            ->lockForUpdate()
             ->first();
         if ($data) {
             try {

+ 17 - 0
app/Services/PlanService.php

@@ -4,6 +4,7 @@ namespace App\Services;
 
 use App\Models\Plan;
 use App\Models\User;
+use Illuminate\Support\Facades\DB;
 
 class PlanService
 {
@@ -20,4 +21,20 @@ class PlanService
         $count = User::where('plan_id', $this->plan->plan_id)->count();
         return $this->plan->capacity_limit - $count;
     }
+
+    public static function countActiveUsers()
+    {
+        return User::select(
+            DB::raw("plan_id"),
+            DB::raw("count(*) as count")
+        )
+            ->where('plan_id', '!=', NULL)
+            ->where(function ($query) {
+                $query->where('expired_at', '>=', time())
+                    ->orWhere('expired_at', NULL);
+            })
+            ->groupBy("plan_id")
+            ->get()
+            ->keyBy('plan_id');
+    }
 }