Mô-đun truy cập nội dung ẩn liên kết menu


10

Tôi đang sử dụng mô-đun Content Access với Drupal 7. khi tôi hạn chế quyền truy cập nút từ một vai trò cụ thể, nó cũng ẩn liên kết trong menu.

Có cách nào để hiển thị các liên kết hạn chế trong menu chính?


Bạn đang tạo menu như thế nào? lập trình? hoặc sử dụng UI quản trị tại admin/structure/menu/manage/main-menu/add?
AjitS

tôi đang thêm menu khi tạo nội dung. một tùy chọn ở dưới cùng 'Cung cấp một liên kết menu'.
monymirza

Câu trả lời:


1

Mục đích chính của hệ thống nội dung truy cập là kiểm soát những gì mọi người dùng có thể nhìn thấy và tránh mọi vấn đề bảo mật có thể xảy ra. Đây là hành vi mong muốn và hầu như mọi mô-đun hoặc ApI chung đều sử dụng nó, vì vậy bạn sẽ không tìm thấy giải pháp mặc định cho việc này.

Tôi đã ở trong tình huống tương tự và giải pháp duy nhất tôi tìm thấy là tạo một mô-đun tùy chỉnh và, trong trường hợp của tôi, truy vấn trực tiếp vào bảng menu để có được tất cả các yếu tố tôi muốn và tự kiểm tra các quyền để hiển thị một liên kết hoặc đơn giản là tiêu đề của nội dung khi người dùng không có quyền xem nội dung đó.


tôi sẽ phải sử dụng mô-đun truy cập nội dung với nó hay không?
monymirza

Menu sẽ không bao giờ hiển thị các nút bị chặn. Tôi sẽ tạo một mô-đun để lấy các nút của menu. Sau đó, bạn có thể chọn hiển thị một liên kết cho mọi nút (nếu người dùng không có quyền truy cập, anh ta sẽ thấy trang 403) hoặc kiểm tra các quyền của mô-đun truy cập nội dung cho mỗi nút và không hiển thị liên kết nếu người dùng không cho Không có quyền truy cập.
david ruiz

1

Tôi đã làm điều này thông qua mô-đun tùy chỉnh:

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

Tôi khá chắc chắn rằng bạn sẽ phải viết một mô-đun tùy chỉnh để đối phó với điều này. Đây là ý tưởng của tôi: thư giãn các hạn chế Truy cập Nội dung, tức là cho phép người dùng xem nội dung của bạn. Sau đó, mô-đun tùy chỉnh của bạn phải triển khai hook_node_load () và xuất ra phản hồi 403 HTTP khi tải các nút mà người dùng của bạn không nên thấy. Ngoài ra hook_ allow () nên được triển khai, do đó bạn sẽ có thể định cấu hình quyền truy cập dễ dàng tại trang quyền.

Dưới đây là một ví dụ nhanh về việc ẩn toàn bộ nút và lọc theo loại nội dung và quyền:

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

Hoặc bạn có thể ẩn một số trường nút, thay vì trả về 403. Nhưng điều này không được khuyến khích theo tài liệu API cho hook_node_load ()


tôi đang thêm menu khi tạo nội dung. một tùy chọn ở dưới cùng 'Cung cấp một liên kết menu'.
monymirza

tôi sẽ phải sử dụng mô-đun truy cập nội dung với nó hay không?
monymirza

0

Bạn có thể sử dụng mô-đun "Luôn hiển thị".

Câu trả lời chi tiết hơn cho câu hỏi của bạn ở đây /drupal//a/52149/7313


Tôi đã sử dụng nhưng không có giải pháp.
monymirza

"Không có giải pháp" nghĩa là gì? Bạn đã cài đặt mô-đun đó?
Eugene Fidelin

vâng tôi đã sử dụng mô-đun này. và điều này không hiệu quả với tôi ...
monymirza
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.