it-swarm-vi.com

Làm thế nào để hạn chế truy cập trực tiếp vào các nút?

Làm cách nào để hạn chế quyền truy cập trực tiếp vào các nút nhưng chỉ cho phép các chế độ xem truy cập vào trường bắt buộc của loại nút cụ thể?

Ví dụ: trong Chế độ xem Trình chiếu, chúng tôi đang trượt trường hình ảnh thuộc về loại nút cụ thể. Nhưng chúng tôi không muốn các công cụ tìm kiếm truy cập và khách truy cập truy cập vào các nút thuộc loại nút đó.

Bất kỳ đề xuất?

12
Fahad Ur Rehman

Nếu chúng tôi hủy xuất bản các nút được thêm bởi user1, chúng sẽ không thể được chỉnh sửa bởi bất kỳ người dùng nào khác ngay cả khi người dùng có quyền chỉnh sửa nội dung của loại nội dung đó.

Hạn chế Node Xem trang có vẻ là cách tốt hơn để hạn chế quyền truy cập trực tiếp vào bất kỳ nút nào của loại nội dung cụ thể.

Cách sử dụng cũng khá đơn giản, bạn chỉ cần kích hoạt mô-đun này và định cấu hình quyền cho các nút có thể truy cập trực tiếp như bình thường.

http://drupal.org/project/restrict_node_page_view

Từ trang dự án:

Bạn đã bao giờ sử dụng một gật đầu trình chiếu mà bạn cần phải được xuất bản nhưng không muốn có thể truy cập nút bằng cách sử dụng đường dẫn nút/XXX? Mô-đun này là dành cho bạn!

Với mô-đun này, bạn có thể vô hiệu hóa quyền truy cập trực tiếp vào các trang nút (nút/XXX) dựa trên các loại nút và quyền.

Kích hoạt mô-đun và đừng quên cấu hình quyền của bạn.

3
Fahad Ur Rehman

Một giải pháp đơn giản là không xuất bản các nút mà bạn không muốn truy cập được. Lượt xem vẫn có thể kéo dữ liệu từ các nút đó.

12
googletorp

Một mô-đun khác làm điều tương tự nhưng có nhiều chức năng hơn.

Lỗ thỏ

Những người bảo trì dự án này yêu cầu "Hạn chế Node Xem trang" Người bảo trì để hợp nhất các dự án trong các vấn đề.

Ưu điểm so với "Hạn chế Node Xem trang":

  • Cùng chức năng chính trên nút nhưng có thể mở rộng cho người dùng/tệp/thuật ngữ phân loại
  • Có thể được sử dụng trong mô-đun của bạn
  • Có thể là toàn cầu đối với loại nội dung hoặc trên mọi nội dung
  • Xem thêm trên trang dự án ...

Bất lợi đối với "Hạn chế Node Xem trang":

  • Nhiều mã hơn có thể kém hiệu quả hơn (cần kiểm tra, không được chứng minh)
1
Payou

bạn nên sử dụng node_access(), có một số tùy chọn nhất định mà bạn có thể dễ dàng thực hiện bằng cách sử dụng hook_node_access(). Việc triển khai node_access() cho phép bạn đưa ra quyết định về việc ai có thể truy cập vào một nút và ai có thể tạo, xóa, chỉnh sửa hoặc cập nhật một nút như vậy. Lượt xem, tuy nhiên, vẫn có thể kéo dữ liệu từ các nút này.

hook_node_access () , node_access ()

1
gauravjeet

Sử dụng mô đun Rules , bạn có thể thực hiện quy tắc tương tự như sau:

{ "rules_check_url" : {
    "LABEL" : "Disallow node/* access",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "text_matches" : {
          "text" : [ "site:current-page:url" ],
          "match" : "node\/\\d+$",
          "operation" : "regex"
        }
      }
    ],
    "DO" : [
      { "drupal_message" : {
          "message" : "Sorry, direct access to URLs like [site:current-page:url] is not allowed around here ...",
          "type" : "error"
        }
      },
      { "redirect" : { "url" : "no_access" } }
    ]
  }
}

Quy tắc trên không (chưa) tính đến việc chỉ áp dụng "hành động" cho các vai trò được chọn (ví dụ: để quản trị viên vẫn có thể sử dụng các đường dẫn này để xem một nút). Nhưng đối với bất kỳ ai hơi quen thuộc với mô-đun Quy tắc, đó là "Điều kiện" đơn giản để thêm ...

Để thử nghiệm quy tắc này trong trang web của riêng bạn, chỉ cần sao chép toàn bộ mã Quy tắc ở trên và dán quy tắc mới vào trang web của riêng bạn, được tạo thông qua chức năng "Nhập". Sau đó chỉnh sửa/tinh chỉnh thêm để làm cho nó phù hợp với môi trường của chính bạn (ví dụ: thông báo "Xin lỗi, ..." sẽ được hiển thị).

0
Pierre.Vriens

Lấy cảm hứng từ https://www.drupal.org/project/restrict_node_page_view bạn có thể tự viết một mô-đun nhỏ:

/**
 * Implements hook_node_access()
 */
function MYMODULE_node_access($node, $op, $account) {

  // Default checks
  if (!is_object($node)) {
    return NODE_ACCESS_IGNORE;
  }

  $type = is_string($node) ? $node : $node->type;

  if($op == 'view' && arg(0) == 'node' && arg(1) === $node->nid) {

    // Restrict access to full MYTYPE node for anon users
    if ($type == 'MYTYPE' && user_is_anonymous()) {
      return NODE_ACCESS_DENY;
    }
  }
  // Default
  return NODE_ACCESS_IGNORE;
}
0
leymannx