logo

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - नया लेआउट बिल्डर अनुभव❗

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - स्टाइलिश, कस्टमाइज़ेबल ब्लॉक टाइप्स: स्लाइडशो, टैब्स, कार्ड्स, एकॉर्डियन्स और कई अन्य। बैकग्राउंड, DOM बॉक्स, जावास्क्रिप्ट प्लगइन्स के लिए बिल्ट-इन सेटिंग्स। आज ही लेआउट बिल्डिंग का भविष्य अनुभव करें।

डेमो EBT मॉड्यूल्स EBT मॉड्यूल्स डाउनलोड करें

❗एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - नया पैराग्राफ्स अनुभव

एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - एनालॉजिकल पैराग्राफ आधारित मॉड्यूल्स का सेट।

डेमो EPT मॉड्यूल्स EPT मॉड्यूल्स डाउनलोड करें

स्क्रॉल

इवेंट सब्सक्राइबर का उपयोग करके टैक्सोनॉमी टर्म्स शब्दावली तक पहुँच को प्रतिबंधित करें

02/09/2025, by Ivan

Menu

कभी-कभी साइट पर कुछ निश्चित, स्थायी श्रेणियाँ (Categories) होनी चाहिए जिन्हें अनजाने में अपडेट नहीं किया जाना चाहिए। इस स्थिति में आप Event Subscriber के साथ कस्टम कोड का उपयोग कर सकते हैं।

आइए एक नया Event Subscriber क्लास अपने कस्टम मॉड्यूल में जोड़ें।

drupalbook_custom.services.yml

services:  
  drupalbook_custom.tag_redirect_subscriber:
    class: Drupal\drupalbook_custom\EventSubscriber\TagRedirectSubscriber
    arguments:
      - '@entity_type.manager'
      - '@current_user'
    tags:
      - { name: event_subscriber }

और अपना Event Subscriber शामिल करें: drupalbook_custom/src/EventSubscriber/TagRedirectSubscriber में:

<?php

namespace Drupal\drupalbook_custom\EventSubscriber;

use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Routing\TrustedRedirectResponse;
use Drupal\Core\Session\AccountProxyInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\KernelEvents;

/**
 * गैर-प्रशासकों को टैग शब्दावली की व्यवस्थापक पृष्ठों से रीडायरेक्ट करता है।
 */
class TagRedirectSubscriber implements EventSubscriberInterface {

  protected EntityTypeManagerInterface $entityTypeManager;
  protected AccountProxyInterface $currentUser;

  public function __construct(
    EntityTypeManagerInterface $entity_type_manager,
    AccountProxyInterface $current_user,
  ) {
    $this->entityTypeManager = $entity_type_manager;
    $this->currentUser = $current_user;
  }

  public static function getSubscribedEvents(): array {
    return [
      KernelEvents::REQUEST => ['onKernelRequest', 32],
    ];
  }

  public function onKernelRequest(RequestEvent $event): void {
    if (!$event->isMainRequest()) {
      return;
    }

    if ($this->currentUser->hasRole('administrator')) {
      return;
    }

    $request = $event->getRequest();
    $route_name = $request->attributes->get('_route');

    $redirect_to = 'https://drupalbook.org/admin/structure'
      . '/taxonomy/manage/tag/overview';

    switch ($route_name) {
      case 'entity.taxonomy_vocabulary.overview_form':
      case 'entity.taxonomy_vocabulary.overview_terms':
      case 'entity.taxonomy_term.add_form':
        $vocabulary = $request->attributes->get('taxonomy_vocabulary');
        if (!empty($vocabulary) && $vocabulary->id() === 'tag') {
          $event->setResponse(new TrustedRedirectResponse($redirect_to));
        }
        return;

      case 'entity.taxonomy_term.edit_form':
      case 'entity.taxonomy_term.delete_form':
        $term = $request->attributes->get('taxonomy_term');
        if ($term && $term->bundle() === 'tag') {
          $event->setResponse(new TrustedRedirectResponse($redirect_to));
        }
        return;

      default:
        return;
    }
  }

}

TagRedirectSubscriber एक कस्टम Event Subscriber है जो Drupal में एक विशिष्ट टैक्सोनॉमी शब्दावली ("tag") के व्यवस्थापक पृष्ठों तक पहुँच को गैर-प्रशासक उपयोगकर्ताओं के लिए प्रतिबंधित करता है। नीचे इसकी संरचना और कोड में प्रमुख बातें दी गई हैं:

1. उद्देश्य और उपयोग मामला

  • उद्देश्य: "tag" शब्दावली में अनजाने या अनधिकृत अपडेट को रोकना।
  • लाभ: महत्वपूर्ण टैक्सोनॉमी शब्दावलियों के लिए UI/UX आधारित एक्सेस कंट्रोल प्रदान करता है।

2. क्लास संरचना और निर्भरताएँ

  • EventSubscriberInterface को लागू करता है ताकि Symfony के इवेंट सिस्टम के साथ संगत हो।
  • निर्भरता:
    • EntityTypeManagerInterface: भविष्य में entity operations के लिए।
    • AccountProxyInterface: वर्तमान उपयोगकर्ता की भूमिका जाँचने के लिए।

3. सब्सक्राइब किए गए इवेंट्स

  • KernelEvents::REQUEST इवेंट को 32 प्राथमिकता के साथ सब्सक्राइब करता है:
    • रूट पैरामीटर पहले से उपलब्ध होते हैं।
    • कंट्रोलर अभी तक निष्पादित नहीं हुआ होता है।

4. रीडायरेक्शन लॉजिक

  • onKernelRequest() सभी एक्सेस चेक और रीडायरेक्शन को संभालता है:
    • केवल मुख्य अनुरोधों पर कार्य करता है।
    • प्रशासकों को अनुमति देता है।
    • विशिष्ट रूट्स की जाँच करता है: जैसे कि add, edit, delete, overview इत्यादि।
    • यदि उपयोगकर्ता non-admin हो और "tag" शब्दावली से संबंधित रूट एक्सेस कर रहा हो, तो उसे रीडायरेक्ट कर दिया जाता है।

5. सुरक्षा और सर्वोत्तम अभ्यास

  • प्रारंभिक हस्तक्षेप: संवेदनशील डेटा प्रदर्शित होने से पहले ही अनुरोध को रोकता है।
  • भूमिका आधारित जाँच: केवल गैर-प्रशासकों को रीडायरेक्ट करता है।
  • अच्छी कोड संरचना: लॉजिक, उपयोगकर्ता जाँच और रीडायरेक्शन अलग-अलग रखे गए हैं।

6. संभावित सुधार

  • इस क्लास को एकाधिक शब्दावलियों या भूमिकाओं के लिए सामान्यीकृत किया जा सकता है।
  • रीडायरेक्शन URL को config के माध्यम से वैयक्तिकृत किया जा सकता है।

7. मुख्य निष्कर्ष

  • यह Event Subscriber Drupal में एक्सेस कंट्रोल को लागू करने का एक प्रभावी तरीका दर्शाता है।
  • यह उन टैक्सोनॉमी शब्दावलियों को सुरक्षित करने के लिए आदर्श है जिन्हें केवल विश्वसनीय उपयोगकर्ताओं द्वारा प्रबंधित किया जाना चाहिए।