Điểm:1

Hạn chế khả năng hiển thị mục menu theo quyền

lá cờ in

Tôi có một menu do mô-đun tạo (sử dụng tệp yaml) với 5 mục menu.Yêu cầu của tôi không cho phép tôi hạn chế khả năng hiển thị mục menu theo vai trò vì các vai trò có thể được thêm động. Vì vậy, tôi phải làm điều này chỉ bằng cách sử dụng quyền.

Những gì tôi đã thử
(1) Hạn chế quyền truy cập mục menu bằng cách sử dụng quyền định tuyến - điều này hiển thị một trang bị cấm nhưng vẫn cho phép hiển thị mục menu bị hạn chế

Xin vui lòng xem các tập tin thực tế của tôi dưới đây:

portal_hrm_core.links.menu.yml

portal_hrm_core.hrm_link:
  tiêu đề: 'Quản lý nhân sự'
  route_name: portal_hrm_core.hrm_link
  menu_name: hcm
  mở rộng: TRUE

portal_hrm_core.routing.yml

cổng_hrm_core. hrm_link:
đường dẫn: '/admin/hrm' 
mặc định:
  _controller: '\Drupal... systemAdminMenuBlockPage'
  _title: 'Nhân sự'
yêu cầu:
  _permission: 'truy cập hrm_core_job+access_hrm_core_employee'

(2) Mô-đun đóng góp - Hiển thị mục menuMục menu cho mỗi vai trò Cả hai thứ này chỉ dựa trên vai trò và không thể hỗ trợ quyền

Tôi biết tôi có thể đi cấp thấp và sử dụng một cái gì đó như hook_pre process_menu nhưng có vẻ nặng nề đối với một yêu cầu đơn giản như vậy khi xem xét số lần hook đó có thể được gọi.

Vì vậy, folks, xin vui lòng bất kỳ gợi ý thêm?

Cảm ơn

lá cờ ru
Điểm AFAIK (1) là chính xác và cũng nên ẩn các mục menu (sử dụng phương pháp đó trong các dự án của riêng tôi). Các menu được lưu vào bộ nhớ cache rất nhiều, bạn đã xóa bộ nhớ cache sau khi thêm quyền định tuyến chưa?
ilechcod avatar
lá cờ in
Hudri - câu trả lời nhanh chóng của bạn đã khích lệ tôi rất nhiều! Cảm ơn. Vui lòng tôi đã cập nhật câu hỏi ban đầu với các tệp nguồn của mình để bạn xem xét. Và tôi đã xóa bộ nhớ cache bằng cả ```devel menu ui``` và ```drush cr```. Tuy nhiên, mục menu này vẫn hiển thị bất kể quyền và tôi không đăng nhập với tư cách quản trị viên.
lá cờ ru
Điều này gần giống hệt như tôi đang làm, tôi chỉ không có khóa `expanded: true` đó trong các tệp của mình, không biết khóa đó. Tôi cũng có thêm `options: _admin_route: TRUE` trong các tệp `routing.yml` của mình, vì tôi chỉ cần điều đó cho các trang có chủ đề quản trị viên.
Điểm:0
lá cờ in

Hoạt động ngay bây giờ. Cảm ơn Hudri đã chỉ cho tôi đi đúng hướng. Tôi đã kiểm tra lại đề xuất của bạn về việc xóa bộ nhớ cache. Trong quá trình này, tôi phát hiện ra rằng dòng sau đây đã được nhận xét trong lazyBuilder() phương thức (các mục menu này nằm trong thanh công cụ của tôi và được tạo bằng mã)

$manipulators = [
  ['có thể gọi được' => 'menu.default_tree_manipulators:checkAccess']
]

Rõ ràng là việc không có những dòng đó đã khiến menu của tôi bỏ qua việc kiểm tra quyền truy cập. Bỏ ghi chú chúng ra đã giải quyết vấn đề. Cảm ơn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.