Chế độ xem nút hook Drupal 8

Hầu hết các nhà phát triển Drupal đều quen thuộc với hook_entity_access [và những người anh em họ của nó là hook_ENTITY_TYPE_ID_accesshook_node_access]. Tuy nhiên, nó chủ yếu được sử dụng để phục vụ “403. Truy cập bị từ chối” đối với các trình duyệt. Và chúng tôi sử dụng một hook riêng, hook_form_alter để tắt các nút chỉnh sửa trên các trang quản trị như trang tổng quan nội dung, chỉnh sửa biểu mẫu nút và chỉnh sửa biểu mẫu phân loại

Sẽ có lợi hơn nếu sử dụng hook_entity_access để vô hiệu hóa quyền truy cập vào các nút. Vô hiệu hóa chế độ xem, chỉnh sửa hoặc xóa [nếu có] qua hook_entity_access sẽ xử lý tất cả những việc sau cùng một lúc

Đọc phần II tại đây

Ưu điểm của việc sử dụng hook_entity_access

1. Phục vụ 403 trang

Như đã đề cập ở trên, đây là cách sử dụng điển hình cho hook_entity_acess. Người dùng sẽ được phục vụ 403 nếu truy cập bị từ chối được trả về bởi hook

2. Tất cả các chế độ xem liệt kê trang với các hoạt động của thực thể

Tất cả các hoạt động của thực thể chế độ xem đã được xử lý. Đây là lợi ích quan trọng nhất vì bạn không phải hook_form_alter từng trang danh sách trong trang web của mình. Theo mặc định, nó sẽ tôn trọng hook_entity_access

3. Biểu mẫu nút lõi / Biểu mẫu phân loại [Mọi biểu mẫu thực thể mặc định]

Nút xóa biểu mẫu thực thể tôn trọng hook_entity_access, như được hiển thị bằng hình ảnh sau đây mô tả nút xóa trong giao diện quản trị nút Drupal

4. Tab / Tác vụ cục bộ

Các tab chỉnh sửa/xóa cốt lõi mặc định cũng tôn trọng hook_entity_access, như được hiển thị bằng hình ảnh sau đây mô tả các tab quản trị có sẵn cho người chỉnh sửa

5. hook_ENTITY_TYPE_ID_access0

hook_ENTITY_TYPE_ID_access1 tôn trọng hook_entity_access. Vì vậy, trong mã, một từ chối trong hoạt động 'xem' của hook_entity_access cũng sẽ dẫn đến một từ chối trong hook_ENTITY_TYPE_ID_access4.  

Trọng tâm của những gì chúng ta đã nói ở trên phụ thuộc vào hành vi này. Tất cả các mục trên thực hiện nội bộ hook_ENTITY_TYPE_ID_access5 kiểm tra

Hãy cẩn thận khi sử dụng hook_ENTITY_TYPE_ID_access6

1. Cho phép/Từ chối quy tắc

Nếu ít nhất một mô-đun đưa ra yêu cầu từ chối, thì điều đó sẽ dẫn đến việc từ chối truy cập, ngay cả khi mô-đun của bạn cung cấp quyền truy cập cho phép [các mô-đun khác chỉ nên đặt quyền truy cập trung lập để nó không vô tình từ chối quyền truy cập vào thực thể].  

Ít nhất một mô-đun phải cung cấp quyền truy cập cho phép đối với một thực thể để cung cấp quyền truy cập. Nếu tất cả các mô-đun đưa ra phản hồi trung lập, thì điều đó sẽ dẫn đến việc từ chối truy cập

2. hook_ENTITY_TYPE_ID_access7 cũng tôn trọng trang quyền của nút [đối với các thực thể nút] kết hợp với hook_ENTITY_TYPE_ID_access8

Trong trang Quyền [/admin/người/quyền], bạn có thể đặt xem một vai trò nhất định có quyền truy cập để chỉnh sửa, xóa [sở hữu/bất kỳ] loại nội dung hay không. Trong nội bộ, điều này cũng cung cấp kết quả truy cập cho phép khi được bật và áp dụng các quy tắc Cho phép/Từ chối tương tự ở trên

Điều này phải được xem xét khi kết hợp hook_entity_access với trang quyền. Vì vậy, ngay cả khi bạn cấp quyền truy cập trung lập, bạn có thể thắc mắc tại sao vẫn có thứ cấp quyền truy cập. Điều này có thể được cung cấp thông qua các trang cấp phép

3. Các hoạt động khác

Theo mặc định, lõi Drupal cung cấp quyền truy cập 'xem', 'cập nhật', 'xóa', 'tạo'. Và bạn có thể lọc thêm quyền truy cập thông qua loại hoạt động. Trong nội bộ, điều này có nghĩa là hook_node_access0.  

Các mô-đun như dịch nội dung cung cấp các hoạt động thực thể khác ngoài các hoạt động cơ bản ở trên. Cụ thể, lõi content_translation cung cấp thao tác 'dịch'. Trong hook_entity_access của bạn. Sau đó, bạn có thể mong đợi một giá trị 'dịch' trên thao tác $, chẳng hạn như khi hiển thị nút dịch trên các trang được mô tả ở trên

Bạn có thể tìm thấy hook_node_access2 để xác định/thay đổi hoạt động của thực thể

Ngoài ra, các hoạt động khác có thể chủ ý phụ thuộc vào hoạt động 'xem', v.v. Đặc biệt, module content_translation cũng phụ thuộc vào thao tác ‘view’ trong việc hiển thị nút dịch. Từ chối quyền truy cập vào các thao tác xem cũng sẽ từ chối quyền truy cập vào nút dịch. Vì vậy, các điều kiện đặc biệt phải được thêm vào cho những trường hợp như vậy

4. quyền bộ nhớ đệm

Đảm bảo đặt bộ nhớ đệm thích hợp thành AccessResult được trả về bởi hook_entity_access.   

Trong ví dụ này, hook_node_access4 đã được thêm dưới dạng phần phụ thuộc bộ nhớ đệm vào AccessResult và cũng là chủ đề hiện tại được sử dụng

Chủ Đề