কীভাবে কাস্টম উপাদান সংখ্যার অ্যাক্সেসকে সীমাবদ্ধ করবেন?


11

আমার কাস্টম উপাদানটিতে, আমি নির্দিষ্ট ব্যবহারকারীদের শুধুমাত্র নির্দিষ্ট গোষ্ঠীতে সীমাবদ্ধ রাখতে সক্ষম হতে চাই। যদি আমি আমার দৃশ্যের একটির জন্য একটি মেনু আইটেম তৈরি করি তবে এটি করা বেশ সহজ: আমি কেবলমাত্র সেই মেনু আইটেমটির জন্য অ্যাক্সেস স্তরটি নির্বাচন করি এবং আমার কাজ শেষ হয়ে যায়।

এখন, সমস্যাটি যদি আসে যদি কেউ বিকল্প = com_mycomp घटक সহ সরাসরি কোনও ইউআরএল অ্যাক্সেস করার চেষ্টা করে, বা আমার উপাদানটির অভ্যন্তরীণ পুনর্নির্দেশগুলির কোনও নির্ধারিত আইটেমিড সহ একটি পৃষ্ঠাতে চলে যায় ... সেক্ষেত্রে, এটি নিজেই সেই উপাদানটির প্রয়োজন যা প্রয়োজন ব্যবহারকারীর গোষ্ঠীটি পরীক্ষা করতে এবং এটি পৃষ্ঠাটি দেখতে সক্ষম কিনা তা নির্ধারণ করতে ... কীভাবে আমি আমার কোডটিতে এটি সীমাবদ্ধ রাখতে পারি? ব্যবহারকারীর গোষ্ঠীটির জন্য কেবল একটি সাধারণ হার্ডকোডযুক্ত চেক? অথবা এটি করার জন্য একটি "স্ট্যান্ডার্ড" উপায় আছে?

আমি নথিপত্র যাচাই করেছিলাম এবং এটি পেয়েছি:

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

আমি কীভাবে এটির জন্য এগিয়ে যেতে পারি? আমি কি আমার দর্শন দ্বারা উত্পন্ন প্রধান অবজেক্টের জন্য সম্পদগুলি সংজ্ঞায়িত করব যাতে আমি জাউসার দিয়ে এর জন্য অ্যাক্সেস পরীক্ষা করতে পারি?

আগাম ধন্যবাদ.

উত্তর:


9

আপনি উপাদানটিতে নিয়ন্ত্রণ প্রেরণের আগে আপনার কাস্টম উপাদানটিতে সমস্ত অনুরোধটি পরিচালনা করতে একটি সিস্টেম প্লাগইন তৈরি করতে পারেন।

সমস্ত অ্যাক্সেস চেকিং সম্পাদন করতে অনএফটারআর্ট ইভেন্টটি ব্যবহার করুন ।

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/>';
}

ধন্যবাদ জিডিপি এই অংশটি কমবেশি নিয়ন্ত্রণে ছিল। সুতরাং আমি এটি করতে "সঠিক উপায়" বুঝতে পারি তা প্রতিটি দৃশ্যেই এটি ব্যবহার করা হয়?
ইসিড্রো বাকেরো

আপনার দরকার ছিল, যদি না আপনি সমস্ত মতামতকে সীমাবদ্ধ রাখতে চান, তবে আপনি কোনও উপাদান পরামিতি বা প্রতিটি দর্শনার্থীর জন্য ব্যবহৃত একটি সহায়ক ফাংশন সেট আপ করতে চান।
জিডিপি

আকর্ষণীয় ... আমি উপাদান পরামিতিগুলির মাধ্যমে দর্শনগুলি সীমাবদ্ধ করার বিষয়ে গবেষণা চালিয়ে যেতে কোথায় যেতে পারি? আবার ধন্যবাদ!
ইসিড্রো বাকেরো

দেখে মনে হচ্ছে আপনি সম্ভবত জুমলা এসিএল সম্পর্কেও শিখতে চান তবে আমি কেবল গুগলকে গবেষণার জন্য পরামর্শ দিতে পারি, বা উপাদান- ক্রিয়েটর ডট কম এএএ উপাদান ব্যবহার করার চেষ্টা করতে পারি এবং এটি কীভাবে কাজ করে তা দেখুন। তাদের উত্পন্ন কোডে $ ক্যানক্রিট, $ ক্যানএডিট এবং $ ক্যানচেকিনের মতো ভেরিয়েবলগুলি সেট করা থাকে। একবার আপনি ACL এর সাথে সত্যিই পরিচিত হয়ে গেলে আপনি নিজের ACL বিধি $ ক্যানভিউয়ের মতো সেট করতে পারেন। সমস্ত মাত্র পরামর্শ - এটি প্রোগ্রামিং, আপনি এটি এক হাজার বিভিন্ন উপায়ে করতে পারেন।
জিডিপি

হাঃ হাঃ হাঃ! ঠিক আছে ঠিক আছে. বুঝেছি, ধন্যবাদ। অনেক কিছু শিখতে হবে ...
আইসিড্রো বাকোয়েরো

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);
 }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.