আমি ড্রুপাল with এর সাথে কনটেন্ট অ্যাক্সেস মডিউলটি ব্যবহার করছি when যখন আমি কোনও নির্দিষ্ট ভূমিকা থেকে নোড অ্যাক্সেসকে সীমাবদ্ধ করি তখন এটি মেনুতেও লিঙ্কটি আড়াল করে।
প্রধান মেনুতে সীমাবদ্ধ লিঙ্কগুলি দেখানোর কোনও উপায় আছে?
আমি ড্রুপাল with এর সাথে কনটেন্ট অ্যাক্সেস মডিউলটি ব্যবহার করছি when যখন আমি কোনও নির্দিষ্ট ভূমিকা থেকে নোড অ্যাক্সেসকে সীমাবদ্ধ করি তখন এটি মেনুতেও লিঙ্কটি আড়াল করে।
প্রধান মেনুতে সীমাবদ্ধ লিঙ্কগুলি দেখানোর কোনও উপায় আছে?
উত্তর:
অ্যাক্সেস কন্টেন্ট সিস্টেমের মূল উদ্দেশ্যটি হ'ল প্রতিটি ব্যবহারকারী কী কী সম্ভাব্য নিরাপত্তা ইস্যু দেখতে পারে এবং এড়াতে পারে তার নিয়ন্ত্রণ রাখা। এটি পছন্দসই আচরণ এবং প্রায় প্রতিটি মডিউল বা সাধারণ এপিআই এটি ব্যবহার করে, সুতরাং আপনি এটির জন্য ডিফল্ট সমাধান খুঁজে পাবেন না।
আমি একই পরিস্থিতিতে ছিলাম এবং আমার একমাত্র সমাধানটি আমি খুঁজে পেলাম একটি কাস্টম মডিউল তৈরি করা এবং আমার ক্ষেত্রে আমার পছন্দসই উপাদানগুলি পেতে মেনু টেবিলটিতে সরাসরি জিজ্ঞাসা করা, এবং নিজেই কোনও লিঙ্ক প্রদর্শন করার জন্য অনুমতিগুলি পরীক্ষা করে দেখি , বা কেবল ব্যবহারকারীর এটি দেখার অনুমতি না থাকলে সামগ্রীর শিরোনাম।
আমি কাস্টম মডিউলটির মাধ্যমে এটি করেছি:
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 এইচটিটিপি প্রতিক্রিয়া আউটপুট করতে হবে। এছাড়াও 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 তবে এটি হুক_নোড_লোড () এর জন্য এপিআই ডকুমেন্টেশন অনুযায়ী নিরুৎসাহিত করা হয়েছে
আপনি "সর্বদা দৃশ্যমান" মডিউলটি ব্যবহার করতে পারেন।
আপনার প্রশ্নের আরও বিস্তারিত উত্তর এখানে https://drupal.stackexchange.com/a/52149/7313
admin/structure/menu/manage/main-menu/add
?