कस्टम घटक विचारों तक पहुंच को कैसे प्रतिबंधित करें?


11

अपने कस्टम घटक में, मैं केवल कुछ उपयोगकर्ता समूह के लिए विशिष्ट दृश्यों को प्रतिबंधित करने में सक्षम होना चाहूंगा। यदि मैं अपने विचारों में से एक के लिए एक मेनू आइटम बनाता हूं, तो यह करना बहुत आसान है: मैं सिर्फ उस मेनू आइटम के लिए पहुंच स्तर का चयन करता हूं और मैं कर रहा हूं।

अब, समस्या तब आती है जब कोई विकल्प = com_mycomponent के साथ सीधे URL तक पहुंचने का प्रयास करता है, या मेरे घटक के किसी भी आंतरिक पुनर्निर्देशन को किसी भी असाइन किए गए Itemid के साथ पृष्ठ पर जाता है ... उस स्थिति में, यह वह घटक है जो स्वयं की आवश्यकता है उपयोगकर्ता समूह की जांच करने और यह निर्धारित करने के लिए कि क्या वह पृष्ठ देखने में सक्षम है ... मैं इसे अपने कोड में कैसे प्रतिबंधित कर सकता हूं? उपयोगकर्ता के उपयोगकर्ता समूह के लिए बस एक साधारण हार्डकोड चेक? या इसे करने के लिए एक "मानक" तरीका है?

मैं प्रलेखन की जाँच कर रहा हूँ, और यह पाया है:

http://docs.joomla.org/J2.5:How_to_implement_actions_in_your_code

लेकिन यह है कि उपयोगकर्ता क्या कर सकता है, उपयोगकर्ता क्या देख सकता है के लिए नहीं। मुझे यह फोरम थ्रेड भी मिला है:

http://forum.joomla.org/viewtopic.php?t=530721

शुरुआत में कोड काफी पुराना है, लेकिन अंत में इसका उपयोग करने की सिफारिश की गई है:

http://api.joomla.org/cms-3/classes/JUser.html#method_authorise

मुझे उसके लिए कैसे आगे बढ़ना चाहिए? क्या मुझे अपने दृष्टिकोण से उत्पन्न मुख्य वस्तु के लिए परिसंपत्तियों को परिभाषित करना चाहिए ताकि मैं JUser के साथ इसके लिए पहुंच का परीक्षण कर सकूं?

अग्रिम में धन्यवाद।

जवाबों:


9

आप घटक को नियंत्रण भेजने से पहले अपने कस्टम घटक के सभी अनुरोधों को संभालने के लिए एक सिस्टम प्लगइन बना सकते हैं।

सभी एक्सेस चेकिंग करने के लिए onAfterRoute इवेंट का उपयोग करें ।

function onAfterRoute()
{
  $user = JFactory::getUser();
  $groups = $user->groups;

  $jinput = JFactory::getApplication()->input;
  $option = $jinput->get('option', '');
  $view   = $jinput->get('view', '');

  // place USER-GROUP related checking here
}

हम्म् ... दिलचस्प दृष्टिकोण। क्लीनर लगता है, और आप सभी तर्क को एक विशिष्ट स्थान पर रख देंगे। मुझे लगता है कि यह सीधे घटक में करने की तुलना में प्रदर्शन के मामले में थोड़ा "बदतर" होगा, लेकिन शायद सिर्फ एक अप्रासंगिक अतिरिक्त मिलीसेकंड है, है ना?
इसिड्रो बैक्एरो

तुलनात्मक रूप से आप कह सकते हैं कि ... अभी भी यह मिलीसेकंड प्रदर्शन हिट घटक के समग्र प्रदर्शन पर बहुत प्रभाव नहीं डालता है और इन सभी ट्रिगर का उपयोग करने के लिए किया जाता है :) और घटक में अतिरिक्त कोड जोड़ने का बिंदु क्या है और बनाएं भ्रम
निक

4

यहां वह कोड दिया गया है, जिसकी आपको शुरुआत यह दिखाने के साथ करनी है कि उपयोगकर्ता किस समूह में है।

$user = JFactory::getUser();
$groups = $user->groups;
if($user->id) {
    echo $user->username.' is logged in<Br/>';
    if (isset($groups[8])) echo " - User is a Super User <Br/>";
    if (isset($groups[7])) echo " - User is an Administrator <Br/>";
    if (isset($groups[6])) echo " - User is an Manager <Br/>";
}else{
    echo 'Not logged in<Br/>';
}

धन्यवाद जीडीपी। यह हिस्सा कमोबेश नियंत्रण में था। तो मुझे समझ में "सही तरीका" यह करने के लिए है कि हर दृश्य पर उपयोग कर रहा है?
इसिड्रो बाकेरो

आपको तब तक करना होगा, जब तक आप सभी विचारों को प्रतिबंधित नहीं करना चाहते हैं, जिस स्थिति में आप कुछ घटक पैरामीटर, या एक सहायक फ़ंक्शन सेट करेंगे, जिसका उपयोग हर fiew के लिए किया जाता है।
जीडीपी

दिलचस्प ... मैं घटक मापदंडों के माध्यम से विचारों को प्रतिबंधित करने के बारे में शोध करने के लिए कहां जा सकता हूं? एक बार फिर धन्यवाद!
Isidro Baquero

ऐसा लगता है कि आप शायद जूमला एसीएल के बारे में भी सीखना चाहते हैं, लेकिन मैं केवल शोध के लिए Google को सुझाव दे सकता हूं, या कंपोनेंट-creator.com पर एए घटक की कोशिश कर सकता हूं और देख सकता हूं कि यह कैसे काम करता है। उनके उत्पन्न कोड में $ canCreate, $ canEdit और $ canCheckin जैसे चर सेट करना शामिल है। एक बार जब आप वास्तव में एसीएल से परिचित हो जाते हैं, तो आप अपने स्वयं के एसीएल नियम को $ canView की तरह सेट कर सकते हैं। सभी सुझाव - यह प्रोग्रामिंग है, आप इसे एक हजार अलग-अलग तरीकों से कर सकते हैं।
जीडीपी

जबरदस्त हंसी! ठीक है ठीक है। समझ गया धन्यवाद। बहुत कुछ सीखना है ...
Isidro Baquero

4

शायद इस सवाल का देर से जवाब। लेकिन यहाँ मैं क्या इस्तेमाल किया है:

मुख्य कंट्रोलर। एफपी फाइल में मैंने डिस्प्ले फ़ंक्शन को निम्नानुसार किया है:

public function display($cachable = false, $urlparams = array())
{
        $user = JFactory::getUser();
        $app  = JFactory::getApplication();

        $view = $this->input->get('view');

        if ($view == 'someview' || $view == 'anotherview')
        {
            if ($user->get('guest') == 1)
            {
                $uri = JUri::getInstance();
                $this->setRedirect(
                        JRoute::_('index.php?option=com_users&view=login&return=' . base64_encode($uri->toString())), $app->enqueueMessage(JText::_('COM_YOURCOMPONENT_LOGIN_REQUIRED'), 'warning')
                );

                return;
            }
         }

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