php laravel-5 laravel-5.2

php - ¿Cómo devolver la respuesta 403 en formato JSON en Laravel 5.2?



laravel-5 laravel-5.2 (3)

Estoy tratando de desarrollar una API RESTful con Laravel 5.2. Me tropecé con cómo devolver la autorización fallida en formato JSON. Actualmente, arroja el error de 403 páginas en lugar de JSON.

Controlador: TenantController.php

class TenantController extends Controller { public function show($id) { $tenant = Tenant::find($id); if($tenant == null) return response()->json([''error'' => "Invalid tenant ID."],400); $this->authorize(''show'',$tenant); return $tenant; } }

Política: TenantPolicy.php

class TenantPolicy { use HandlesAuthorization; public function show(User $user, Tenant $tenant) { $users = $tenant->users(); return $tenant->users->contains($user->id); } }

La autorización actualmente funciona bien, pero muestra una página prohibida de 403 en lugar de devolver el error json. ¿Es posible devolverlo como JSON para el 403? Y, ¿es posible hacerlo global para todas las autorizaciones fallidas (no solo en este controlador)?


Logramos resolver esto modificando el manejador de excepciones encontrado en App/Exceptions/Handler.php agregándolo en la función de render .

public function render($request, Exception $e) { if ($e instanceof AuthorizationException) { return response()->json([''error'' => ''Not authorized.''],403); } return parent::render($request, $e); }


Sí, haga un método simple antes en su póliza que se ejecutará antes de todas las demás verificaciones de autorización,

public function before($user, $ability,Request $request) { if (!yourconditiontrue) { if ($request->ajax()) { return response(''Unauthorized.'', 401); } else { return abort(''403''); } } }


Puedes interceptar la excepción

try { $this->authorize(''update'', $data); } catch (/Exception $e) { return response()->json(null, 403); }