use Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher;
use Drupal\permissions_by_term\Event\PermissionsByTermDeniedEvent;
+use Drupal\permissions_by_term\Service\AccessCheck;
+use Drupal\permissions_by_term\Service\AccessStorage;
+use Drupal\permissions_by_term\Service\Term;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpFoundation\JsonResponse;
-use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
-use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
-use Drupal\permissions_by_term\Service\AccessCheck;
-use Drupal\permissions_by_term\Service\Term;
+use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
+use Symfony\Component\HttpKernel\Event\GetResponseEvent;
+use Symfony\Component\HttpKernel\KernelEvents;
/**
* Class KernelEventListener.
*/
private $eventDispatcher;
+ /**
+ * @var AccessStorage
+ */
+ private $accessStorageService;
+
/**
* Instantiating of objects on class construction.
*/
public function __construct()
{
$this->accessCheckService = \Drupal::service('permissions_by_term.access_check');
+ $this->accessStorageService = \Drupal::service('permissions_by_term.access_storage');
$this->term = \Drupal::service('permissions_by_term.term');
$this->eventDispatcher = \Drupal::service('event_dispatcher');
}
// Restricts access to nodes (views/edit).
if ($this->canRequestGetNode($event->getRequest())) {
$nid = $event->getRequest()->attributes->get('node')->get('nid')->getValue()['0']['value'];
- if (!$this->accessCheckService->canUserAccessByNodeId($nid)) {
+ if (!$this->accessCheckService->canUserAccessByNodeId($nid, false, $this->accessStorageService->getLangCode($nid))) {
$accessDeniedEvent = new PermissionsByTermDeniedEvent($nid);
$this->eventDispatcher->dispatch(PermissionsByTermDeniedEvent::NAME, $accessDeniedEvent);
$query_string = trim($query_string);
$tid = $this->term->getTermIdByName($query_string);
- if (!$this->accessCheckService->isAccessAllowedByDatabase($tid)) {
+
+ $term = $this->term->getTerm();
+ $termLangcode = 'en';
+ if ($term instanceof \Drupal\taxonomy\Entity\Term) {
+ $termLangcode = $term->language()->getId();
+ }
+
+ if (!$this->accessCheckService->isAccessAllowedByDatabase($tid, \Drupal::currentUser()->id(), $termLangcode)) {
$this->sendUserToAccessDeniedPage();
}
}
$allowed_terms = [];
foreach ($suggested_terms as $term) {
$tid = $this->term->getTermIdByName($term->label);
- if ($this->accessCheckService->isAccessAllowedByDatabase($tid)) {
+ $termLangcode = 'en';
+ if ($this->term->getTerm() instanceof \Drupal\taxonomy\Entity\Term) {
+ $termLangcode = $this->term->getTerm()->language()->getId();
+ }
+
+ if ($this->accessCheckService->isAccessAllowedByDatabase($tid, \Drupal::currentUser()->id(), $termLangcode)) {
$allowed_terms[] = [
'value' => $term->value,
'label' => $term->label,