惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
SecWiki News
SecWiki News
Forbes - Security
Forbes - Security
N
News | PayPal Newsroom
S
Security @ Cisco Blogs
Schneier on Security
Schneier on Security
V
V2EX - 技术
S
Secure Thoughts
W
WeLiveSecurity
Google DeepMind News
Google DeepMind News
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
S
Securelist
S
Security Archives - TechRepublic
Know Your Adversary
Know Your Adversary
V
Vulnerabilities – Threatpost
Security Latest
Security Latest
Recent Commits to openclaw:main
Recent Commits to openclaw:main
G
GRAHAM CLULEY
H
Hacker News: Front Page
Microsoft Azure Blog
Microsoft Azure Blog
I
Intezer
Google Online Security Blog
Google Online Security Blog
美团技术团队
阮一峰的网络日志
阮一峰的网络日志
T
The Exploit Database - CXSecurity.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Webroot Blog
Webroot Blog
Jina AI
Jina AI
Engineering at Meta
Engineering at Meta
P
Proofpoint News Feed
The Cloudflare Blog
I
InfoQ
L
LangChain Blog
U
Unit 42
P
Proofpoint News Feed
S
Schneier on Security
S
Security Affairs
Y
Y Combinator Blog
T
Tenable Blog
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
量子位
Google DeepMind News
Google DeepMind News
Cyberwarzone
Cyberwarzone
博客园 - 聂微东
D
Darknet – Hacking Tools, Hacker News & Cyber Security
GbyAI
GbyAI
AWS News Blog
AWS News Blog

博客园 - 范仁义

吊打市面上100%的markdown编辑器 范仁义软件合集 全网最通俗易懂傅里叶变换 【强化学习玩转超级马里奥】05-最最简单的超级马里奥训练过程 【强化学习玩转超级马里奥】04-stable-baselines3 库介绍 【强化学习玩转超级马里奥】03-马里奥环境代码说明 【强化学习玩转超级马里奥】02-运行超级马里奥 【强化学习玩转超级马里奥】01-nes-py 包安装实例 【强化学习玩转超级马里奥】01-超级马里奥环境安装 【强化学习玩转超级马里奥】00-强化学习玩马里奥课程介绍 linux查找操作 分析MongoDB架构案例 legend3---bootstrap modal框出现蒙层,无法点击modal框内容(z-index问题) legend3---laravel报419错误 laravel中间件Middleware原理解析及实例 git: Failed to connect to github.com port 443: Timed out 记忆规律 tinymce上传的图片不指定宽高 z-index总结
laravel自定义中间件实例
范仁义 · 2021-09-26 · via 博客园 - 范仁义

laravel自定义中间件实例

一、总结

一句话总结:

二、laravel自定义中间件实例

1、中间件位置和代码

legend3/app/Http/Middleware/Home/UploadLessonMiddleware.php

<?php

namespace App\Http\Middleware\Home;

use App\Models\BaHome\AaUser\AbUserSetting\Get\GetUserSetting;
use Closure;
use Auth;

//上传功能中间件
class UploadLessonMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        //前端的上传功能中间件
        //用来判断用户是否有上传课程、上传视频、上传博客的权限
        //如果登录成功就进行下一步
        //如果没有登录成功就返回到登录页
        if(!Auth::guard('user')->check()){
            return redirect('/login');
        }else{
            //如果登录了
            $u_id=Auth::guard('user')->user()->id;
            $u_id=intval($u_id);
            $user_setting=GetUserSetting::byUID($u_id);
            //有发布课程的权限
            if($user_setting['us_can_publish_lesson']){
                //进行下一步操作
                return $next($request);
            }else{
                return redirect('/no_upload_lesson_permission');
            }
        }

    }
}

2、注册中间件

legend3/app/Http/Kernel.php

protected $routeMiddleware = [
    //fry
    //后端的登录中间件注册
    'admin.auth'=>Middleware\Admin\Admin::class,
    //前端的登录中间件注册
    'home.auth'=>Middleware\Home\User::class,
    //发布课程权限中间件
    'upload_lesson'=>Middleware\Home\UploadLessonMiddleware::class,

    省略若干无关代码...........
]

3、使用中间件

class CreateLessonController extends CommonController
{

    public function __construct()
    {
        //排除'index'方法,进行中间件的验证
        $this->middleware('upload_lesson')->except(['no_upload_lesson_permission']);
    }
    省略若干无关代码........... 
}

可以写个方法来显示没通过权限验证的消息

//没有上传课程权限的中间件返回显示信息
public function no_upload_lesson_permission(){
    $validate_message='你没有权限发布课程、章节、视频!!';
    $error_data=['validate_message'];
    return view('home.ya_common.validate_return_page.validate_return_page',compact($error_data));
}