Modul Akses Konten menyembunyikan tautan menu


10

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?


bagaimana kamu membuat menu? secara terprogram? atau menggunakan UI UI di admin/structure/menu/manage/main-menu/add?
AjitS

saya menambahkan menu saat konten dibuat. opsi di bagian bawah 'Berikan tautan menu'.
monymirza

Jawaban:


1

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.


apakah saya harus menggunakan modul akses konten dengannya atau tidak?
monymirza

Menu dengan sendirinya tidak akan pernah menampilkan node yang diblokir. Saya akan membuat modul untuk mengambil node dari menu. Kemudian Anda dapat memilih untuk menampilkan tautan untuk setiap simpul (jika pengguna tidak memiliki akses, ia akan melihat halaman 403), atau memeriksa izin modul akses konten untuk setiap simpul, dan tidak menampilkan tautan jika pengguna tidak tidak memiliki akses.
david ruiz

1

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);
       }
     }
   }

0

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 ()


saya menambahkan menu saat konten dibuat. opsi di bagian bawah 'Berikan tautan menu'.
monymirza

apakah saya harus menggunakan modul akses konten dengannya atau tidak?
monymirza

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.