LoginAuthMiddleware.php 2.2 KB
<?php

namespace App\Http\Middleware\Aside;

use App\Enums\Common\Code;
use App\Http\Logic\Aside\LoginLogic;
use App\Models\Manage\Group;
use App\Models\Manage\Manage;
use App\Models\Manage\Menu;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Str;

class LoginAuthMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next)
    {
        $manage = LoginLogic::manage();
        if (!$manage) {
            return response(['code'=> Code::USER_LOGIN_ERROE,'message'=>'当前用户未登录']);
        }
        //权限
        if($manage['id'] != Manage::ADMINISTRATOR_ID){ //排除超级管理员
            if($manage['status'] != 1){
                return response(['code'=> Code::USER_LOGIN_ERROE,'message'=>'当前用户被禁用']);
            }
        }
        if($manage['gid'] != 0){
            $groupInfo = $this->getGroup($manage);
            if($groupInfo['status'] != 1){
                return response(['code'=> Code::USER_LOGIN_ERROE,'message'=>'当前用户角色被禁用']);
            }
            //获取当前操作的路由name
            $action = Route::currentRouteName();
            //TODO::操作权限
            $menuModel = new Menu();
            $menu_id = $menuModel->read(['route_name'=>$action],['id']);
            if($menu_id !== false){
                if(in_array($menu_id['id'],$groupInfo['rights']) === false){
                    return response(['code'=>Code::USER_PERMISSION_ERROE,'message'=>'当前用户没有权限']);
                }
            }
        }
        return $next($request);
    }

    /**
     * @remark :查看角色是否被禁用
     * @name   :getGroup
     * @author :lyh
     * @method :post
     * @time   :2023/7/28 15:26
     */
    public function getGroup($manage){
        $groupModel = new Group();
        $groupInfo = $groupModel->read(['id'=>$manage['gid']]);
        return $groupInfo;
    }

}