Saya menggunakan modul Akses Konten dengan Drupal 7. ketika saya membatasi akses node dari peran tertentu, itu juga menyembunyikan tautan di menu.
apakah ada cara untuk menampilkan tautan terbatas di menu utama?
Saya menggunakan modul Akses Konten dengan Drupal 7. ketika saya membatasi akses node dari peran tertentu, itu juga menyembunyikan tautan di menu.
apakah ada cara untuk menampilkan tautan terbatas di menu utama?
Jawaban:
Tujuan utama sistem konten akses adalah untuk memiliki kendali atas apa yang dapat dilihat oleh setiap pengguna dan menghindari setiap masalah keamanan yang mungkin terjadi. Ini adalah perilaku yang diinginkan dan hampir setiap modul atau ApI umum menggunakannya, sehingga Anda tidak akan menemukan solusi default untuk ini.
Saya sudah dalam situasi yang sama dan satu-satunya solusi yang saya temukan adalah membuat modul khusus dan, dalam kasus saya, permintaan langsung ke tabel menu untuk mendapatkan semua elemen yang saya inginkan, dan periksa izin sendiri untuk menampilkan tautan , atau hanya judul konten ketika pengguna tidak memiliki izin untuk melihatnya.
Saya telah melakukan ini melalui modul khusus:
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);
}
}
}
Saya cukup yakin Anda harus menulis modul khusus untuk menangani ini. Inilah ide saya: kendurkan pembatasan Akses Konten, yaitu membiarkan pengguna melihat konten Anda. Kemudian modul khusus Anda harus mengimplementasikan hook_node_load () dan menghasilkan respons HTTP 403 saat memuat node yang seharusnya tidak dilihat pengguna Anda. Juga hook_permission () harus diimplementasikan, sehingga Anda akan dapat mengkonfigurasi akses dengan mudah di halaman izin.
Berikut adalah contoh cepat menyembunyikan seluruh simpul dan memfilter menurut jenis konten dan izin:
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();
}
}
}
Atau Anda dapat menyembunyikan beberapa bidang simpul, alih-alih mengembalikan 403. Namun ini tidak disarankan menurut dokumentasi API untuk hook_node_load ()
Anda dapat menggunakan modul "Selalu terlihat".
Jawaban yang lebih terperinci untuk pertanyaan Anda ada di sini https://drupal.stackexchange.com/a/52149/7313
admin/structure/menu/manage/main-menu/add
?