स्क्रॉल
इवेंट सब्सक्राइबर का उपयोग करके टैक्सोनॉमी टर्म्स शब्दावली तक पहुँच को प्रतिबंधित करें
कभी-कभी साइट पर कुछ निश्चित, स्थायी श्रेणियाँ (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 में एक्सेस कंट्रोल को लागू करने का एक प्रभावी तरीका दर्शाता है।
- यह उन टैक्सोनॉमी शब्दावलियों को सुरक्षित करने के लिए आदर्श है जिन्हें केवल विश्वसनीय उपयोगकर्ताओं द्वारा प्रबंधित किया जाना चाहिए।