Day 21 Part 2 #100DaysOfCode
Thêm nhiều tham số đến Middleware
//routes/web.php
Route::group(['middleware' => ['role_check:Normal_User,Admin']], function() { Route::get('/user/{user_id}', 'UserController@showUserDashboard'); });
Mở file app/Http/Kernel.php thêm middleware
protected $routeMiddleware = [ . . . 'role_check' => \App\Http\Middleware\CheckRoleMiddleware::class, ];
//File middleware
/** * Handle an incoming request. * * @param $request * @param Closure $next * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector */ public function handle($request, Closure $next) { $roles = array_slice(func_get_args(), 2); // [default, admin, manager] foreach ($roles as $role) { try { Role::whereName($role)->firstOrFail(); // make sure we got a "real" role if (Auth::user()->hasRole($role)) { return $next($request); } } catch (ModelNotFoundException $exception) { dd('Could not find role ' . $role); } } Flash::warning('Access Denied', 'You are not authorized to view that content.'); // custom flash class return redirect('/'); }
File model User.php
public function hasRole($role) { return User::where('role', $role)->get(); } public function userID() { return $this->user_id; }
Hoặc ta có thể check Role trong Middleware bằng cách sau:
public function handle($request, Closure $next, $role) { if ($this->auth->guest()) { if ($request->ajax()) { return response('Unauthorized.', 401); } else { return redirect()->guest('login'); } } $userID = Auth::user()->userID(); if (auth()->check() && auth()->user()->hasRole($role)) { return $next($request); } }
Ta có thể dùng dấu(...) để xác nhận mảng tham số trong middleware
public function handle($request, Closure $next, ...$permissions){} public function handle($request, Closure $next, ...$roles) { foreach($roles as $role){ if ($request->user()->hasRole($role)){ return $next($request); } } abort(404); }
Còn không ta chèn trực tiếp tham số trong function handle() luôn
public function handle($request, Closure $next, $permission1, $permission2, $permission3) { return $next($request); }