[Drupal 8] Access callbakc des permissions sur les Vocabulaire

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonour,

J'ai fais un custom module pour ajouter des permissions sur chaque vocabulaires.
A cet instant les permissions sont crées. (Le nom machine du vocabulaire est présent dans la permission)

J'ai fais un alter du router pour ajouter mon custom access :

<?php
/<strong>
 * @
file
 
* Contains \Drupal\taxonomy_better\Routing\RouteSubscriber
 
*/

namespace Drupal\taxonomy_better\Routing;

use Drupal\Core\Routing\RouteSubscriberBase;
use
Symfony\Component\Routing\RouteCollection;

/</strong>
 *
Listens to the dynamic route events.
 */
class
RouteSubscriber extends RouteSubscriberBase {

  /**
   * {@inheritdoc}
   */
 
protected function alterRoutes(RouteCollection $collection) {

    $vocAddRoute = $collection->get('entity.taxonomy_vocabulary.add_form');
   
$vocAddRoute->setRequirement('_permission', 'add taxonomy vocabulary');

    $vocTermAdd = $collection->get('entity.taxonomy_term.add_form');
   
$vocTermAdd->setRequirement('_custom_access', 'Drupal\taxonomy_better\Controller\TaxonomyBetterAccessController::access');
  }

}
?>

J'aimerai récupérer le vocabulaire dans mon access, mais je n'est pas réussi à passer le vocabulaire en argument.
Pour le moment je récupère le vocabulaire ID via l'url. Mais c'est moche et j'aimerai un système un peux plus sur et surtout j'aimerai savoir faire ce genre de code.

<?php
/<strong>
 * @
file
 
* Contains \Drupal\taxonomy_better\Controller\TaxonomyBetterAccessController.
 */

namespace Drupal\taxonomy_better\Controller;

use Drupal\Core\Session\AccountInterface;
use
Drupal\Core\Access\AccessResult;

/</strong>
 *
Description of TaxonomyBetterAccessController
 
*
 * @
author Mickaël
 
*/
class
TaxonomyBetterAccessController {

  /**
   * Checks access for a specific request.
   *
   * @param \Drupal\Core\Session\AccountInterface $account
   *   Run access checks for this account.
   */
 
public function access(AccountInterface $account) {
   
//@todo mauvaise façon de récupèrer le vocabulaire id. Trouver un façon beaucoup plus propre
   
$current_path    = explode('/', \Drupal::service('path.current')->getPath());
   
$vocabulary_type = $current_path[5];

    if ($account->hasPermission('add terms in ' . $vocabulary_type))
      return
AccessResult::allowed();

    return AccessResult::forbidden();
  }

}
?>

Pouvez vous m'expliquer comment passer un argument dans un custom access?

Merci bien

Version de Drupal :