কন্টেন্ট অ্যাক্সেস মডিউল লুকানো মেনু লিঙ্কগুলি


10

আমি ড্রুপাল with এর সাথে কনটেন্ট অ্যাক্সেস মডিউলটি ব্যবহার করছি when যখন আমি কোনও নির্দিষ্ট ভূমিকা থেকে নোড অ্যাক্সেসকে সীমাবদ্ধ করি তখন এটি মেনুতেও লিঙ্কটি আড়াল করে।

প্রধান মেনুতে সীমাবদ্ধ লিঙ্কগুলি দেখানোর কোনও উপায় আছে?


আপনি কিভাবে মেনু তৈরি করছেন? programatically? বা অ্যাডমিন ইউআই ব্যবহার করছেন admin/structure/menu/manage/main-menu/add?
অজিতস

সামগ্রী তৈরি করার সময় আমি মেনু যুক্ত করছি। নীচে একটি বিকল্প 'একটি মেনু লিঙ্ক সরবরাহ করুন'।
monymirza

উত্তর:


1

অ্যাক্সেস কন্টেন্ট সিস্টেমের মূল উদ্দেশ্যটি হ'ল প্রতিটি ব্যবহারকারী কী কী সম্ভাব্য নিরাপত্তা ইস্যু দেখতে পারে এবং এড়াতে পারে তার নিয়ন্ত্রণ রাখা। এটি পছন্দসই আচরণ এবং প্রায় প্রতিটি মডিউল বা সাধারণ এপিআই এটি ব্যবহার করে, সুতরাং আপনি এটির জন্য ডিফল্ট সমাধান খুঁজে পাবেন না।

আমি একই পরিস্থিতিতে ছিলাম এবং আমার একমাত্র সমাধানটি আমি খুঁজে পেলাম একটি কাস্টম মডিউল তৈরি করা এবং আমার ক্ষেত্রে আমার পছন্দসই উপাদানগুলি পেতে মেনু টেবিলটিতে সরাসরি জিজ্ঞাসা করা, এবং নিজেই কোনও লিঙ্ক প্রদর্শন করার জন্য অনুমতিগুলি পরীক্ষা করে দেখি , বা কেবল ব্যবহারকারীর এটি দেখার অনুমতি না থাকলে সামগ্রীর শিরোনাম।


আমি কি এটিতে কন্টেন্ট অ্যাক্সেস মডিউল ব্যবহার করতে হবে বা না?
monymirza

মেনু নিজে থেকে কখনও অবরুদ্ধ নোডগুলি প্রদর্শন করবে না। আমি মেনুটির নোডগুলি আনতে একটি মডিউল তৈরি করব। তারপরে আপনি প্রতিটি নোডের জন্য একটি লিঙ্ক প্রদর্শন করতে পারেন (যদি ব্যবহারকারী অ্যাক্সেস না পান তবে তিনি একটি 403 পৃষ্ঠা দেখতে পাবেন) বা প্রতিটি নোডের জন্য সামগ্রী অ্যাক্সেস মডিউল অনুমতিগুলি পরীক্ষা করতে পারেন, এবং ব্যবহারকারী যদি ডন না করেন তবে কোনও লিঙ্ক প্রদর্শন করবেন না অ্যাক্সেস নেই।
ডেভিড রুইজ

1

আমি কাস্টম মডিউলটির মাধ্যমে এটি করেছি:

function mymodule_form_menu_edit_item_alter(&$form, &$form_state, $form_id) {
     if ($form_state['build_info']['args'][0] == 'edit') {
       $item = $form_state['build_info']['args'][1];

       $form['ignore_access_roles'] = array(
         '#type' => 'checkboxes',
         '#multiple' => TRUE,
         '#title' => t("Ignore access"),
         '#options' => user_roles(),
         '#description' => t("If a user with one of the selected roles has no access to the menu item's path, the menu item is <strong>not</strong> hidden."),
         '#default_value' => empty($item['options']['ignore_access_roles']) ? array() : $item['options']['ignore_access_roles'],
       );

       $form['#validate'][] = 'mymodule_form_menu_edit_item_validate';
     }
   }

   function mymodule_form_menu_edit_item_validate(&$form, &$form_state) {
     if (isset($form_state['values']['ignore_access_roles'])) {
       $form_state['values']['options']['ignore_access_roles'] = $form_state['values']['ignore_access_roles'];


       $form_state['values']['options']['alter'] = TRUE;
     }
   }


   function mymodule_translated_menu_link_alter(&$link, $map) {
     if (!empty($link['options']['ignore_access_roles']) && empty($link['access'])) {

       global $user;

       // Get role ids for which the ignore access option applies.
       $rids = array_values($link['options']['ignore_access_roles']);

       $matching_rids = array_intersect(array_keys($user->roles), $rids);

       if (!empty($matching_rids)) {
         // User has one of the specified roles: override menu link access.
         $link['access'] = TRUE;

         // Localize. This must be done because it is only done for links with
         // access TRUE in _menu_link_translate.
         _menu_item_localize($link, $map, TRUE);
       }
     }
   }

0

আমি নিশ্চিত যে এটি মোকাবেলার জন্য আপনাকে একটি কাস্টম মডিউল লিখতে হবে। এখানে আমার ধারণা: সামগ্রী অ্যাক্সেস বিধিনিষেধ শিথিল করুন, অর্থাৎ ব্যবহারকারীদের আপনার সামগ্রী দেখতে দিন। তারপরে আপনার কাস্টম মডিউলটি হুক_নোড_লোড () বাস্তবায়ন করতে হবে এবং নোডগুলি লোড করার সময় আপনার ব্যবহারকারীদের দেখা উচিত হবে না এমন 403 এইচটিটিপি প্রতিক্রিয়া আউটপুট করতে হবে। এছাড়াও hook_permission () প্রয়োগ করা উচিত, যাতে আপনি অনুমতি পৃষ্ঠায় সহজেই অ্যাক্সেস কনফিগার করতে সক্ষম হবেন।

পুরো নোডটি লুকিয়ে রাখা এবং সামগ্রীর ধরণ এবং অনুমতি অনুসারে ফিল্টারিং করার একটি দ্রুত উদাহরণ এখানে রয়েছে:

function mymodule_permission() {
  return array('access reserved content');
}

function mymodule_node_load($nodes, $types) {
  if (in_array('my_reserved_content_type', $types)) {
    if (!user_access('access reserved content')) {
      drupal_access_denied();
    }
  }
}

অথবা আপনি 403 ফেরতের পরিবর্তে নোড ক্ষেত্রগুলির কয়েকটি লুকিয়ে রাখতে পারেন But তবে এটি হুক_নোড_লোড () এর জন্য এপিআই ডকুমেন্টেশন অনুযায়ী নিরুৎসাহিত করা হয়েছে


সামগ্রী তৈরি করার সময় আমি মেনু যুক্ত করছি। নীচে একটি বিকল্প 'একটি মেনু লিঙ্ক সরবরাহ করুন'।
monymirza

আমি কি এটিতে কন্টেন্ট অ্যাক্সেস মডিউল ব্যবহার করতে হবে বা না?
monymirza

0

আপনি "সর্বদা দৃশ্যমান" মডিউলটি ব্যবহার করতে পারেন।

আপনার প্রশ্নের আরও বিস্তারিত উত্তর এখানে https://drupal.stackexchange.com/a/52149/7313


আমি ব্যবহার করেছি কিন্তু কোন সমাধান নেই।
monymirza

"কোন সমাধান নেই" মানে কি? আপনি কি সেই মডিউলটি ইনস্টল করেছেন?
ইউজিন ফিদেলিন

হ্যাঁ আমি এই মডিউলটি ব্যবহার করেছি। এবং এটি আমার পক্ষে কাজ করে না ...
monymirza
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.