Điểm:0

Cách sử dụng hook_block_access() với khối tùy chỉnh được tạo trong giao diện người dùng

lá cờ gb

Tôi có một khối tùy chỉnh được tạo bằng thư viện khối tùy chỉnh Drupal 9. Tôi muốn sử dụng hook_block_access() để kiểm soát quyền truy cập vào nó, nhưng vì nó là một khối tùy chỉnh nên nó không có tên máy khối. ID duy nhất tôi có thể tìm thấy (sử dụng biến Devel) là:

đối tượng stdClass ( [LỚP] => Drupal\block_content\Entity\BlockContent [chủ đề:được bảo vệ] => [giá trị: được bảo vệ] => Mảng
( [id] => Mảng ( [x-mặc định] => 4 )

        [revision_id] => Mảng
            (
                [x-mặc định] => 4
            )

        [loại] => Mảng
            (
                [x-mặc định] => cơ bản
            )

        [uuid] => Mảng
            (
                [x-mặc định] => f0c17429-584a-4221-995c-c00f4c41c714
            )

        [langcode] => Mảng
            (
                [x-mặc định] => vi
            )

        [revision_user] => Mảng
            (
                [x-mặc định] => 
            )

        [revision_created] => Mảng
            (
                [x-mặc định] => 1632243859
            )

        [revision_log] => Mảng
            (
                [x-mặc định] => 
            )

        [revision_default] => Mảng
            (
                [x-mặc định] => 1
            )

        [isDefaultRevision] => Mảng
            (
                [x-mặc định] => 1
            )

        [trạng thái] => Mảng
            (
                [x-mặc định] => 1
            )

        [thông tin] => Mảng
            (
                [x-default] => Thêm nội dung
            )

        [đã thay đổi] => Mảng
            (
                [x-mặc định] => 1632261438
            )

        [default_langcode] => Mảng
            (
                [x-mặc định] => 1
            )

        [revision_translation_affected] => Mảng
            (
                [x-mặc định] => 1
            )

        [tái sử dụng] => Mảng
            (
                [x-mặc định] => 1
            )

        [body] => Mảng
            (
                [x-default] => Mảng
                    (
                        [0] => Mảng
                            (
                                [giá trị] => 

vân vân...

Tôi đến phần chỉnh sửa khối bằng cách truy cập: http://mysite.com/block/4

Làm thế nào tôi có thể sử dụng hook_block_access(Khối $block, $operation, AccountInterface $account) để kiểm soát quyền truy cập vào khối này? Làm cách nào để xác định khối này trong khối $ Biến đổi?

Điểm:2
lá cờ cn

Sau khi bạn đã tạo khối tùy chỉnh trong giao diện người dùng, bạn có thể đặt nó ở các vùng khác nhau. Mỗi trường hợp này có một tên máy và hook_block_access() hoạt động như dự định.

Nếu bạn muốn kiểm soát quyền truy cập ở cấp thực thể nội dung, điều này có ý nghĩa vì bạn có thể sử dụng nội dung khối không chỉ trong bố cục khối, hãy triển khai móc truy cập cho loại thực thể block_content:

sử dụng Drupal\Core\Access\AccessResult;
sử dụng Drupal\Core\Entity\EntityInterface;
sử dụng Drupal\Core\Session\AccountInterface;

/**
 * Triển khai hook_ENTITY_TYPE_access().
 */
function mymodule_block_content_access(EntityInterface $entity, $operation, AccountInterface $account) {
  nếu ($hoạt động == 'xem') {
    if ($entity->id() == 4) {
      trả về AccessResult::forbidden();
    }
  }
  trả về AccessResult::neutral();
}
SomebodySysop avatar
lá cờ gb
Đã phát hiện ra rằng hook_block_access() hoàn toàn không hoạt động khi khối được đặt bằng trình tạo bố cục. mặt khác, hook_entity_type_access() hoạt động hoàn hảo. Cảm ơn vì điều đó.

Đă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.