मैं Drupal 7 के साथ कंटेंट एक्सेस मॉड्यूल का उपयोग कर रहा हूं । जब मैं एक विशिष्ट भूमिका से नोड एक्सेस को प्रतिबंधित करता हूं, तो यह मेनू में लिंक भी छिपाता है।
क्या मुख्य मेनू में प्रतिबंधित लिंक दिखाने का कोई तरीका है?
मैं Drupal 7 के साथ कंटेंट एक्सेस मॉड्यूल का उपयोग कर रहा हूं । जब मैं एक विशिष्ट भूमिका से नोड एक्सेस को प्रतिबंधित करता हूं, तो यह मेनू में लिंक भी छिपाता है।
क्या मुख्य मेनू में प्रतिबंधित लिंक दिखाने का कोई तरीका है?
जवाबों:
एक्सेस कंटेंट सिस्टम का मुख्य उद्देश्य यह है कि प्रत्येक उपयोगकर्ता हर संभव सुरक्षा समस्या को देख सकता है और उससे बच सकता है। यह वांछित व्यवहार है और लगभग हर मॉड्यूल या सामान्य एपीआई इसका उपयोग करता है, इसलिए आपको इसके लिए डिफ़ॉल्ट समाधान नहीं मिलेगा।
मैं एक ही स्थिति में रहा हूं और एकमात्र समाधान जो मुझे मिला, वह था कस्टम मॉड्यूल बनाना और, मेरे मामले में, सीधे मेनू तालिका में क्वेरी सभी तत्वों को प्राप्त करने के लिए जिन्हें मैं चाहता हूं, और किसी लिंक को प्रदर्शित करने के लिए अनुमतियों की स्वयं जांच करें , या बस सामग्री का एक शीर्षक जब उपयोगकर्ता के पास इसे देखने की अनुमति नहीं है।
मैंने यह कस्टम मॉड्यूल के माध्यम से किया है:
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);
}
}
}
मुझे पूरा यकीन है कि इससे निपटने के लिए आपको एक कस्टम मॉड्यूल लिखना होगा। यहां मेरा विचार है: सामग्री पहुंच प्रतिबंधों को शिथिल करें, अर्थात उपयोगकर्ताओं को अपनी सामग्री देखने दें। तब आपके कस्टम मॉड्यूल को हुक_नोड_लोड लागू करना होता है () और 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 वापस करने के बजाय कुछ नोड फ़ील्ड छिपा सकते हैं। लेकिन यह हुक_नोड_लोड () के लिए एपीआई प्रलेखन के अनुसार हतोत्साहित किया जाता है।
आप "हमेशा दृश्यमान" मॉड्यूल का उपयोग कर सकते हैं।
आपके प्रश्न का अधिक विस्तृत उत्तर यहां है https://drupal.stackexchange.com/a/52149/7313
admin/structure/menu/manage/main-menu/add
?