विचार होने के बाद हुक_नोड_केस


14

मैं hook_node_access()कस्टम मानदंड के आधार पर कुछ नोड्स तक उपयोगकर्ताओं की पहुंच को अस्वीकार करने के लिए उपयोग कर रहा हूं । हालाँकि, मैं नहीं चाहता कि यह सामग्री किसी ऐसे दृश्य में दिखाई दे जो उपयोगकर्ता द्वारा मापदंड को पारित न करने पर उसे सूचीबद्ध करता है। क्या विचारों को hook_node_access()लागू करने का कोई तरीका है ?


अगर व्यू मॉड्यूल वास्तव में एक्सेस अनुमति का सम्मान नहीं करता है hook_node_access(), तो बस एक चीज है जिसे किया जाना चाहिए: व्यू मॉड्यूल कोड को बदलना।
kiamlaluno

मुझे नहीं लगता कि हुक को तब तक निकाल दिया जाता है जब तक कि नोड वास्तव में नोड_लोड के साथ अपनी संपूर्णता में लोड नहीं होता है, इसलिए शायद यह अभी भी दिखाई देता है। हालाँकि मैंने एक फ़िल्टर प्लगइन पर काम करना शुरू कर दिया है जो फ़िल्टरिंग के लिए उसी विधि का उपयोग करेगा जो लोगों को लॉक करने के लिए hook_node_access () का उपयोग करता है। मुझे बस अपने सभी विचारों में उस फिल्टर को जोड़ना याद रखना होगा और यह काम करना चाहिए। मैं यहाँ पर जानकारी के साथ वापस आ जाऊंगा एक बार जब मैं ऐसा करूँगा ताकि दूसरों को लाभ हो सके।
Nenne

ठीक है, इसलिए मेरा उपयोग मामला यह था: ग्राहक किसी भी नोड के लिए उपयोग करने योग्य 10 स्तर चाहता है और उपयोगकर्ताओं को सभी नोड्स को उनके एक्सेस स्तर को देखने में सक्षम होना चाहिए। मानक नोड दृश्य के लिए यह आसानी से hook_node_access के माध्यम से हल किया गया था। हालाँकि, जैसा कि विचारों ने इसका सम्मान नहीं किया, मैंने तर्क के लिए कस्टम php कोड के साथ एक प्रासंगिक फ़िल्टर बनाया। Php कोड मूल रूप से उपयोगकर्ताओं के पहुँच स्तर (द्वारा अलग किए गए उचित सिंटैक्स में) की तुलना में कम या बराबर मान लौटाता है। इस समाधान का दोष यह है कि प्रत्येक दृश्य को इस कॉन्फ़िगरेशन की आवश्यकता होगी।
nenne

मुझे इस समस्या से निपटने वाले विचारों के लिए एक मुद्दा मिला, यह समस्या को हल करने के एक उचित तरीके को भी संदर्भित करता है: drupal.org/node/1266388
Nenne

2
यदि आप इस मुद्दे को हल करने के बारे में एक उत्तर लिख सकते हैं, तो यह पूरी तरह से स्वीकार्य है; जैसा कि मर्लिनोफचोस कहते हैं, दृश्य मॉड्यूल डेटाबेस क्वेरी का उपयोग करके नोड्स को लोड कर रहा है, और यही कारण है कि hook_node_access()कार्यान्वयन का सम्मान नहीं किया जाता है। जैसा कि यह "डिज़ाइन द्वारा" है, कार्य की रिपोर्टिंग करना ठीक है।
kiamlaluno

जवाबों:


6

मेरे यहाँ कुछ समय पहले भी यही सवाल था ।

hook_node_accessद्वारा मान्यता प्राप्त नहीं है viewsयाmenus । इसे केवल रक्षा की अंतिम पंक्ति के रूप में इस्तेमाल किया जाना चाहिए।

नियंत्रण नोड का उपयोग करने का एक बेहतर तरीका के माध्यम से है hook_node_access_recordsऔर hook_node_grantsके रूप में वर्णित यहाँ और यहाँ


4

पूर्ण नोड को देखने का प्रयास करते समय केवल हुक_नोड_केस () लगाया जाता है। आपको जो करने की आवश्यकता है वह हुक_नोडे_केस_कार्ड () और हुक_नोड_ग्रांट () लागू करने के लिए है ।


1
क्या आप विस्तार से समझा सकते हैं?

1

दृश्य एसक्यूएल का उपयोग करके प्रदर्शित करने के लिए नोड निर्धारित करते हैं। अफसोस की बात है कि प्रदर्शन के कारणों से, ड्रुपल के लिए सभी संभावित उम्मीदवारों पर एक नोड_ लोड करने के लिए यह संभव नहीं होगा और फिर उन सभी में से हर एक पर hook_node_access को कॉल करें। एक दृश्य की कल्पना करें जो हजारों नोड्स दिखाता है (विशेषकर जब पेजर का उपयोग कर रहा हो)। यदि तर्क एसक्यूएल में नहीं किया गया है, तो पेजर्स में बहुत ही असामान्य कार्यक्षमता होगी, इस प्रकार ड्रुपल फोर्स आप इसे अपने डेटाबेस में एक्सेस रिकॉर्ड का उपयोग करते हुए रिक के रूप में करते हैं।

Access_records बनाना एक उचित मात्रा में अधिक काम है, लेकिन यह SQL के साथ काम करेगा। इस प्रकार मैं अपनी कार्यक्षमता को हल करने के लिए एक मौजूदा नोड_एसीट मॉड्यूल का उपयोग करने की सलाह देता हूं जहां भी संभव हो क्योंकि यह एक्सेस रिकॉर्ड का उपयोग करके कार्यान्वित किया जाएगा और इस प्रकार विचारों के साथ काम करेगा।

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

ड्रुपल में "नोड_केस" टैग वाले सभी प्रश्नों में स्वचालित रूप से कुछ विशेष तर्क जोड़े जाएंगे। प्रलेखन देखेंटैगिंग के बारे में अधिक जानने । यह विशेष तर्क प्रत्येक क्षेत्र के लिए "node_access" तालिका में शामिल हो जाता है और यह शर्त जोड़ता है कि "gid" उपयोगकर्ता के लिए लागू किए गए किसी एक gids के बराबर है, उपयोगकर्ता के पास उपयुक्त अनुमति है।

यह पूरी प्रणाली सभी प्रश्नों को नोड_केस को ठीक से संभालने की अनुमति देती है, यहां तक ​​कि प्रश्नों को भी गिनती है, आदि यह बहुत शक्तिशाली है, लेकिन एक उच्च सीखने की अवस्था है जो सिर्फ सरल हुक_नोड_केस है। जब भी संभव हो, एक मौजूदा नोड_एसीट मॉड्यूल का उपयोग करके आप इस पूरे सिरदर्द को बचा सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.