सामग्री एक्सेस मॉड्यूल छिपाना मेनू लिंक


10

मैं Drupal 7 के साथ कंटेंट एक्सेस मॉड्यूल का उपयोग कर रहा हूं । जब मैं एक विशिष्ट भूमिका से नोड एक्सेस को प्रतिबंधित करता हूं, तो यह मेनू में लिंक भी छिपाता है।

क्या मुख्य मेनू में प्रतिबंधित लिंक दिखाने का कोई तरीका है?


आप मेनू कैसे बना रहे हैं? प्रोग्राम के? या व्यवस्थापक UI का उपयोग कर रहे हैं admin/structure/menu/manage/main-menu/add?
अजीत

सामग्री बनाते समय मैं मेनू जोड़ रहा हूं। नीचे एक विकल्प 'मेनू लिंक प्रदान करें'।
मॉनमिरज़ा

जवाबों:


1

एक्सेस कंटेंट सिस्टम का मुख्य उद्देश्य यह है कि प्रत्येक उपयोगकर्ता हर संभव सुरक्षा समस्या को देख सकता है और उससे बच सकता है। यह वांछित व्यवहार है और लगभग हर मॉड्यूल या सामान्य एपीआई इसका उपयोग करता है, इसलिए आपको इसके लिए डिफ़ॉल्ट समाधान नहीं मिलेगा।

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


क्या मुझे इसके साथ कंटेंट एक्सेस मॉड्यूल का उपयोग करना होगा या नहीं?
मॉनमिरज़ा

स्वयं द्वारा मेनू अवरुद्ध नोड्स को प्रदर्शित नहीं करेगा। मैं मेनू के नोड्स लाने के लिए एक मॉड्यूल बनाऊंगा। फिर आप प्रत्येक नोड के लिए एक लिंक प्रदर्शित करने का विकल्प चुन सकते हैं (यदि उपयोगकर्ता के पास एक्सेस नहीं है तो वह 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 HTTP प्रतिक्रिया को आउटपुट करता है जब आपके उपयोगकर्ताओं को नहीं देखना चाहिए। इसके अलावा 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 वापस करने के बजाय कुछ नोड फ़ील्ड छिपा सकते हैं। लेकिन यह हुक_नोड_लोड () के लिए एपीआई प्रलेखन के अनुसार हतोत्साहित किया जाता है।


सामग्री बनाते समय मैं मेनू जोड़ रहा हूं। नीचे एक विकल्प 'मेनू लिंक प्रदान करें'।
11

क्या मुझे इसके साथ कंटेंट एक्सेस मॉड्यूल का उपयोग करना होगा या नहीं?
सोमनिरजा

0

आप "हमेशा दृश्यमान" मॉड्यूल का उपयोग कर सकते हैं।

आपके प्रश्न का अधिक विस्तृत उत्तर यहां है https://drupal.stackexchange.com/a/52149/7313


मैं इस्तेमाल किया, लेकिन कोई समाधान नहीं।
मॉनमिरज़ा

आपका क्या मतलब है "कोई समाधान नहीं"? क्या आपने उस मॉड्यूल को स्थापित किया है?
यूजीन फिदेलिन

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