LoginAuthMiddleware.php 2.6 KB
<?php

namespace App\Http\Middleware\Bside;

use App\Enums\Common\Code;
use App\Models\User\ProjectMenu;
use App\Models\User\ProjectRole as ProjectRoleModel;
use App\Services\ProjectServer;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Route;

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)
    {
        $token = $request->header('token');
        $info = Cache::get($token);
        if(empty($info) || empty($token)){
            return response(['code'=>Code::USER_LOGIN_ERROE,'message'=>'当前用户未登录']);
        }
        //0代表超级管理员
        if($info['role_id'] != 0){
            $role_info = $this->setRole($info);
            //获取当前操作的路由name
            $action = Route::currentRouteName();
            //查询当前用户是否拥有权限操作
            $this->viewOperateAuth($role_info,$action);
        }
        // 设置数据库
        $project = ProjectServer::useProject($info['project_id']);
        if(empty($project)){
            return response(['code'=>Code::USER_LOGIN_ERROE,'message'=>'数据库未配置']);
        }
        return $next($request);
    }


    /**
     * @remark :查看角色权限
     * @name   :setRole
     * @author :lyh
     * @method :post
     * @time   :2023/7/28 14:53
     */
    public function setRole($info){
        //操作权限设置
        $projectRoleModel = new ProjectRoleModel();
        $role_info = $projectRoleModel->read(['id'=>$info['role_id']]);
        if($role_info['status'] != 0){
            return response(['code'=>Code::USER_LOGIN_ERROE,'message'=>'当前用户角色被禁用']);
        }
        return $role_info;
    }

    /**
     * @remark :查看操作权限
     * @name   :viewOperateAuth
     * @author :lyh
     * @method :post
     * @time   :2023/7/28 14:56
     */
    public function viewOperateAuth($role_info,$action){
        $projectMenuModel = new ProjectMenu();
        $menu_id = $projectMenuModel->read(['action'=>$action],['id']);
        if($menu_id !== false){
            if(strpos($role_info['role_menu'], $menu_id['id']) === false){
                return response(['code'=>Code::USER_LOGIN_ERROE,'message'=>'当前用户没有权限']);
            }
        }
    }
}