Làm thế nào để hiển thị / ẩn một liên kết dựa trên sự cho phép?


7

Tôi đang tìm cách để ẩn / hiển thị một liên kết từ menu chính nếu người dùng hiện tại có quyền cụ thể. Mục menu đã được tạo và mục menu liên kết đến một nút được điều khiển bởi hook_node_access ().


Để liên kết các mục menu?
kiamlaluno

Nó liên kết với một nút nhưng các quy tắc truy cập nút được xác định trong hook_node_access () vì tôi đã có các quy tắc node_access được xác định bởi mô-đun khác. Tôi đang sử dụng hook_node_access () để hạn chế một nút đối với người dùng có quyền cụ thể.
Camsoft

Câu trả lời:


4

Theo mặc định, Drupal sẽ ẩn tất cả các mục menu mà người dùng không có quyền truy cập, do đó, điều dễ nhất để làm là yêu cầu quyền truy cập được chọn cho trang mà mục menu đang liên kết đến.


Thật không may, điều này sẽ không làm vì nút không sử dụng bảng node_access và thay vào đó là sử dụng hook_node_access () và có vẻ như các quyền của menu bỏ qua hàm hook_node_access ().
Camsoft

Hook_node_access chỉ hoạt động cho mô-đun xác định nút IIRC.
googletorp

Trong Drupal 7, hook_node_access () có thể được triển khai từ bất kỳ mô-đun nào, không chỉ các mô-đun xác định loại nội dung.
kiamlaluno

1
hook_node_access () có thể được triển khai từ bất kỳ mô-đun nào và sẽ ngăn truy cập vào nút nếu được triển khai đúng cách. Nhưng thật không may, điều này không liên quan đến việc tạo ra các mục menu. Nếu bạn nhìn vào mã của menu_tree_check_access thì bạn sẽ thấy rằng nó sử dụng một truy vấn chọn với thẻ node_accessđể lấy quyền truy cập. Vì vậy, chỉ cần thực hiện hook_node_access()sẽ không làm điều đó.
berbler

2

Những gì bạn có thể làm là thay đổi cuộc gọi lại truy cập được liên kết với "nút /% nút" bằng cách sử dụng hook_menu_alter () , sau đó viết mã cho cuộc gọi lại truy cập của bạn dựa trên mã của node_access () . Có những trường hợp cụ thể mà bạn vẫn muốn xử lý như node_access()vậy; ví dụ: người dùng có quyền "bỏ qua truy cập nút" sẽ luôn truy cập vào nút.

function mymodule_menu_alter(&$items) {
  if (isset($items['node/%node'])) {
    $items['node/%node']['access callback'] = 'mymodule_node_access';
  }
}

Hãy xem xét rằng cuộc gọi lại truy cập quyết định ai có thể nhìn thấy một liên kết và ai có thể truy cập một trang khi người dùng viết URL trực tiếp trên thanh địa chỉ trình duyệt.


1

Bạn có thể muốn xem xét mô-đun drupal menu_item_visibility

Để trích dẫn trang dự án:

Ví dụ: nếu bạn muốn tạo liên kết 'Tài khoản của tôi' trỏ đến / người dùng, cả người dùng ẩn danh và người dùng đã đăng ký đều có quyền truy cập vào đường dẫn / người dùng, vì vậy cả hai sẽ thấy liên kết, ngay cả khi người dùng ẩn danh về mặt kỹ thuật không có tài khoản . Sử dụng mô-đun này sẽ cho phép bạn chỉ hiển thị liên kết 'Tài khoản của tôi' cho người dùng đã đăng ký và ẩn nó khỏi người dùng ẩn danh.

Mô-đun sử dụng cùng một giao diện người dùng được sử dụng cho các cài đặt hiển thị khối để làm quen.

Hoặc mô-đun menu_view - cung cấp cách tiếp cận dựa trên Chế độ xem để tạo menu (mà tôi nghĩ bao gồm dựa trên người dùng)

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.