You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					71 lines
				
				2.0 KiB
			
		
		
			
		
	
	
					71 lines
				
				2.0 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace App\Http\Middleware;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use Backpack\CRUD\app\Http\Middleware\AuthenticateSession;
							 | 
						||
| 
								 | 
							
								use Closure;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class CheckIfAdmin
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Checked that the logged in user is an administrator.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * --------------
							 | 
						||
| 
								 | 
							
								     * VERY IMPORTANT
							 | 
						||
| 
								 | 
							
								     * --------------
							 | 
						||
| 
								 | 
							
								     * If you have both regular users and admins inside the same table, change
							 | 
						||
| 
								 | 
							
								     * the contents of this method to check that the logged in user
							 | 
						||
| 
								 | 
							
								     * is an admin, and not a regular user.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * Additionally, in Laravel 7+, you should change app/Providers/RouteServiceProvider::HOME
							 | 
						||
| 
								 | 
							
								     * which defines the route where a logged in user (but not admin) gets redirected
							 | 
						||
| 
								 | 
							
								     * when trying to access an admin route. By default it's '/home' but Backpack
							 | 
						||
| 
								 | 
							
								     * does not have a '/home' route, use something you've built for your users
							 | 
						||
| 
								 | 
							
								     * (again - users, not admins).
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param  \Illuminate\Contracts\Auth\Authenticatable|null  $user
							 | 
						||
| 
								 | 
							
								     * @return bool
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    private function checkIfUserIsAdmin($user)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        // return ($user->is_admin == 1);
							 | 
						||
| 
								 | 
							
								        return true;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Answer to unauthorized access request.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param  \Illuminate\Http\Request  $request
							 | 
						||
| 
								 | 
							
								     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    private function respondToUnauthorizedRequest($request)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if ($request->ajax() || $request->wantsJson()) {
							 | 
						||
| 
								 | 
							
								            return response(trans('backpack::base.unauthorized'), 401);
							 | 
						||
| 
								 | 
							
								        } else {
							 | 
						||
| 
								 | 
							
								            return redirect()->guest(backpack_url('login'));
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * Handle an incoming request.
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param  \Illuminate\Http\Request  $request
							 | 
						||
| 
								 | 
							
								     * @param  \Closure  $next
							 | 
						||
| 
								 | 
							
								     * @return mixed
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function handle($request, Closure $next)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        if (backpack_auth()->guest()) {
							 | 
						||
| 
								 | 
							
								            return $this->respondToUnauthorizedRequest($request);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (! $this->checkIfUserIsAdmin(backpack_user())) {
							 | 
						||
| 
								 | 
							
								            return $this->respondToUnauthorizedRequest($request);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return $next($request);
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |