*/ protected $policies = []; /** * Register any authentication / authorization services. * * @return void */ public function boot(): void { // Register policies. $this->registerPolicies(); Gate::define('isConceptor', function (User $user) { return $user->role === RoleEnum::conceptor; }); Gate::define('viewStatsByBrand', [StatisticPolicy::class, 'viewStatsByBrand']); Gate::define('viewByQuestion', [StatisticPolicy::class, 'viewByQuestion']); Gate::define('answersByDays', [StatisticPolicy::class, 'answersByDays']); Auth::viaRequest('api-hmac', function (Request $request) { /** * Un token devrais être fourni pour chaque requete */ if (is_null($request->bearer_token)) { return null; } // * Si la route actuelle n'as pas de nom alors on refuse de la traiter. if (!(Helper::getRoute($request))) { // @codeCoverageIgnoreStart return null; // @codeCoverageIgnoreEnd } $service = null; try { // * On récupère le service actuel correspondant au token fourni. $service = Service::getFromBearerToken($request->bearer_token ?? ''); } catch (ModelNotFoundException $e) { return null; } // * Preload the brand as we will access it often later. $service = $service->load('brand'); /** ** All ApiV4 routes must pass Brand model to controller action since a Brand owns ** a service token, otherwise the api cannot be called. ** This hack is a custom binder instead of passing ** this to route as a parameter */ app()->bind(Service::class, function () use ($service) { return $service; }); // * On authenticate la request en vérifiant sa signature. if ($service->authenticateApi($request)) { return $service; } return null; }); } }