Laravel中间件验证角色,中间件传递参数

 RorinL     2022年08月31日 星期三 11:42:54     laravel      laravel   php   中间件    

中间件传递参数格式: 中间件名称:参数值

public function handle(Request $request, Closure $next, $role = ''){} //中间件xxx

例如需要传递role参数那么

Route::group(['middleware'=>'verifpermiss:admin'],function(){}
//admin就是传递的值,对应中间件handle中的$role参数

那么如何通过这个参数并与当前用户角色一并判断是否有权访问控制器呢?

//中间件xxx
    /** token认证
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string  $role 为空默认自动当前用户角色,不指定
     * @return mixed
     * */
    public function handle(Request $request, Closure $next, $role = '')
    {
        //用户登陆后记录下来的基本用户数据; $unserializedata['role']:用户角色
        //普通用户检测
        if($unserializedata['role'] === 'user'){
            if($role !== 'user' && $role !== ''){
                return response('no permission',401);
            }
            $data = User::where('uid',$unserializedata['uid'])->first();
            if(!$data){
                return response()->json(['data'=>null,'msg'=>'非法'],401);
            }
        }
        //管理员检测
        if($unserializedata['role'] === 'admin'){
            if($role !== 'admin' && $role !== ''){
                return response('no permission',401);
            }
            $data = Admin::where('uid',$unserializedata['uid'])->first();
            if(!$data){
                return response()->json(['data'=>null,'msg'=>'非法'],401);
            }
        }
        // ... code
        return $next($request);
    }

暂无评论

发表回复

您的电子邮箱地址不会被公开。

CAPTCHAis initialing...