To handle unauthorized access exceptions in Laravel, you can follow these steps:
1. Catch the AuthorizationException in the Exception Handler:
   In your application's exception handler (`app/Exceptions/Handler.php`), add a handler for the `Illuminate\Auth\Access\AuthorizationException` exception, which is thrown when a policy check fails.
php
   public function render($request, Exception $exception)
   {
       if ($exception instanceof \Illuminate\Auth\Access\AuthorizationException) {
           // Handle the unauthorized exception
           if ($request->expectsJson()) {
               return response()->json([
                   'message' => 'You are not authorized to perform this action.',
               ], 403);
           } else {
               return redirect()->guest(route('login'));
           }
       }
       return parent::render($request, $exception);
   }
   In this example, the exception handler checks if the thrown exception is an instance of `AuthorizationException`. If it is, it checks if the request expects JSON. If so, it returns a 403 Forbidden response with a custom message. If not, it redirects the user to the login page.
2. Customize the Exception Response:
   You can further customize the exception response to suit your application's needs. For example, you can return a more specific error message, log the exception, or redirect the user to a different page.
php
   public function render($request, Exception $exception)
   {
       if ($exception instanceof \Illuminate\Auth\Access\AuthorizationException) {
           if ($request->expectsJson()) {
               return response()->json([
                   'message' => 'You are not authorized to perform this action.',
               ], 403);
           } else {
               return redirect()->route('home')->with('error', 'You are not authorized to perform this action.');
           }
       }
       return parent::render($request, $exception);
   }
   In this example, the response is customized based on the request format. For JSON requests, a 403 Forbidden response is returned with a custom message. For non-JSON requests, the user is redirected to the home page with a flash error message.
3. Handle Exceptions in Controllers:
   Alternatively, you can handle unauthorized exceptions directly in your controller actions. This can be useful if you want to provide a more specific error message or handle the exception in a different way.
php
   public function update(Request $request, Post $post)
   {
       try {
           $this->authorize('update', $post);
           // Update the post
       } catch (\Illuminate\Auth\Access\AuthorizationException $exception) {
           return redirect()->back()->with('error', 'You are not authorized to update this post.');
       }
       return redirect()->route('posts.index');
   }
   In this example, the `update` method of the `PostController` catches the `AuthorizationException` and redirects the user back to the previous page with a custom error message.
By handling unauthorized access exceptions in your application, you can provide a more user-friendly experience when users attempt to perform actions they are not authorized to perform. This helps improve the overall security and usability of your Laravel application.
Citations:[1] https://spatie.be/docs/laravel-permission/v6/advanced-usage/exceptions
[2] https://laracasts.com/discuss/channels/laravel/where-to-put-code-to-handle-unauthorized-exception
[3] https://laravel.com/docs/11.x/errors
[4] https://laravel.com/docs/7.x/errors
[5] https://laracasts.com/discuss/channels/laravel/catch-forbidden-and-unauthorised-and-display-custom-error
