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


12

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?

Câu trả lời:


12

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 đó.


1
Quá đơn giản? Không có thứ gọi là "giải pháp quá đơn giản". Sự phức tạp không phải là một mục tiêu trong chính nó, phải không? Có lẽ câu trả lời của Googletorp không giải quyết được vấn đề cụ thể của bạn, nhưng trong trường hợp đó, bạn sẽ phải giải thích chi tiết hơn và giải thích tại sao không.
marcvangend

@marcvangend Mặc dù đã muộn nhưng tôi nhận ra đó không phải là câu trả lời cho câu hỏi của mình. Hy vọng ai đó có thể thêm một câu trả lời tốt hơn
Fahad Ur Rehman

@Fahad Để có câu trả lời tốt hơn, bạn cần đặt câu hỏi tốt hơn. Câu trả lời của Googletorp có vẻ như là một giải pháp tốt cho tôi, và những người ủng hộ dường như đồng ý. Nếu nó không giải quyết được vấn đề của bạn, hãy vào và chỉnh sửa câu hỏi của bạn, thêm tất cả các chi tiết có liên quan.
marcvangend

@marcvangend thực sự vấn đề của tôi đã được giải quyết và tôi đã chấp nhận câu trả lời trước đó nhưng theo nhận xét của bạn. Googletorps có uy tín rất cao, không có bất kỳ sự khác biệt nào nếu tôi chấp nhận hoặc không chấp nhận câu trả lời của anh ấy. Anh ấy cung cấp một giải pháp thay thế tuyệt vời mà tôi cũng đã bình chọn cho anh ấy.
Fahad Ur Rehman

@Fahad Bằng cách nhận thức một câu trả lời bạn đang nói: câu trả lời này đã giải quyết vấn đề của tôi. Đó là một tuyên bố mạnh mẽ và rất hữu ích cho khách truy cập đến, để tìm hiểu xem câu trả lời có hữu ích hay không. Nếu câu trả lời của tôi không giải quyết được vấn đề của bạn, thì bạn nên chỉnh sửa câu hỏi của mình và đăng một số chi tiết về lý do giải pháp của tôi không hiệu quả với bạn và như marcvangend đã nói, hãy thêm chi tiết.
googletorp

3

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ế xem trang nút có vẻ là một 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 thuộc 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 chính nút đó có thể truy cập được 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 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.


1

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ỏ

Các nhà bảo trì của dự án này yêu cầu "Hạn chế xem trang nút" 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ế xem trang nút":

  • 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ế xem trang nút":

  • 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

bạn nên sử dụng node_access(), có một số tùy chọn 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 xem 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 nút đó. 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 ()


0

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;
}

Mô-đun này đã được đề cập vài năm trước. Bạn có thể giải thích những gì câu trả lời mới của bạn mang đến cho chủ đề?
Mołot

@ Mołot - ... để tự viết một mô-đun. Chỉnh sửa câu trả lời.
leymannx

0

Sử dụng mô-đun Quy tắc, 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ị).

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.