diff --git a/hierarchy_manager.routing.yml b/hierarchy_manager.routing.yml
index 8dbfe2702bd579f1de98ac09d563dde3c8f1cfb0..55cf2ce0e62557d1ad57b90fe2e130211be17943 100644
--- a/hierarchy_manager.routing.yml
+++ b/hierarchy_manager.routing.yml
@@ -25,7 +25,7 @@ hierarchy_manager.taxonomy.tree.json:
     _title: 'Taxonomy tree'
     _controller: '\Drupal\hierarchy_manager\Controller\HmTaxonomyController::taxonomyTreeJson'
   requirements:
-    _permission: 'administer taxonomy'
+    _custom_access: '\Drupal\hierarchy_manager\Controller\HmTaxonomyController::access'
   options:
     _admin_route: TRUE
 hierarchy_manager.taxonomy.tree.update:
@@ -34,7 +34,7 @@ hierarchy_manager.taxonomy.tree.update:
     _title: 'Taxonomy tree'
     _controller: '\Drupal\hierarchy_manager\Controller\HmTaxonomyController::updateTerms'
   requirements:
-    _permission: 'administer taxonomy'
+    _custom_access: '\Drupal\hierarchy_manager\Controller\HmTaxonomyController::access'
   options:
     _admin_route: TRUE   
  
diff --git a/src/Controller/HmTaxonomyController.php b/src/Controller/HmTaxonomyController.php
index 3b96443b0004a96135c21c7e8297f53b236337d0..fdf79ffd95ff4e4cea3b430f8098dad428d5622a 100644
--- a/src/Controller/HmTaxonomyController.php
+++ b/src/Controller/HmTaxonomyController.php
@@ -2,10 +2,12 @@
 
 namespace Drupal\hierarchy_manager\Controller;
 
+use Drupal\Core\Access\AccessResult;
 use Drupal\Core\Access\CsrfTokenGenerator;
 use Drupal\Core\Controller\ControllerBase;
 use Drupal\Core\Entity\EntityRepositoryInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Session\AccountInterface;
 use Drupal\taxonomy\Entity\Term;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\Request;
@@ -69,6 +71,22 @@ class HmTaxonomyController extends ControllerBase {
         );
   }
 
+
+  /**
+   * Access check callback for taxonomy tree json.
+   *
+   * @param \Drupal\Core\Session\AccountInterface $account
+   *  User account.
+   * @param string $vid
+   *  Vocabulary ID.
+   */
+  public function access(AccountInterface $account, string $vid) {
+    if ($account->hasPermission('administer taxonomy')) {
+      return AccessResult::allowed();
+    }
+    return AccessResult::allowedIfHasPermission($account, "edit terms in {$vid}");
+  }
+
   /**
    * Callback for taxonomy tree json.
    *