Drupal 8 - Ajouter une restriction par ip sur une route

Dans le fichier MODULE.routing.yml on va utiliser le requirement « _custom_access »

module.ma_methode:
  path: 'mon-module/mon-chemin'
  defaults:
    _controller: '\Drupal\module\Controller\monController::maMethode'
  requirements:
    _custom_access: '\Drupal\module\Controller\monController::maMethodeAccess'

Que l'on va implémenter dans notre contrôleur, ici monController.php :

  public function maMethodeAccess() {
    /** @var Request $request */
    $request = \Drupal::request();
    $ipAutorisees = \Drupal::config('iamyourstory.checkcard_api')->get('allowed_ips')
    $ipAutorisees = explode(',', $ipAutorisees);
    $ipAutorisees = array_map('trim', $ipAutorisees);
    return AccessResult::allowedIf(\in_array($request->server->get('REMOTE_ADDR'), $ipAutorisees));
  }

à noter :

  • Les ip autorisées sont stockées en configuration via un formulaire de config, les ip sont séparées par une virgule, d'où le explode.
  • J'utilise ensuite la fonction array_map('trim', $ipAutorisees) pour supprimer les éventuels espaces. Si la personne avait saisi « 127.0.0.1, 192.168.0.2 », mon tableau sans le trim sera ['127.0.0.1', ' 192.168.0.2'] (espace au départ de la seconde ip.)

Ajouter un commentaire

Ne sera pas publié
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...