Submitted by Mixalis44 on
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