วิธี จำกัด การเข้าถึงโหนดโดยตรง?


12

วิธี จำกัด การเข้าถึงโดยตรงไปยังโหนด แต่เพียงอนุญาตให้มุมมองในการเข้าถึงฟิลด์ที่ต้องการของประเภทโหนดเฉพาะ?

ตัวอย่างเช่นในการดูสไลด์โชว์เรากำลังเลื่อนฟิลด์ภาพที่เป็นของประเภทโหนดเฉพาะ แต่เราไม่ต้องการให้เสิร์ชเอ็นจิ้นเข้าถึงและผู้เยี่ยมชมเพื่อเข้าถึงโหนดที่อยู่ในประเภทโหนดนั้น

ข้อเสนอแนะใด ๆ

คำตอบ:


12

ทางออกที่ง่ายคือการไม่เผยแพร่โหนดที่คุณไม่ต้องการให้เข้าถึงได้ มุมมองยังสามารถดึงข้อมูลจากโหนดเหล่านั้น


1
ง่ายเกินไป? ไม่มีสิ่งใดในฐานะ 'วิธีแก้ปัญหาที่ง่ายเกินไป' ความซับซ้อนไม่ใช่เป้าหมายในตัวเองใช่ไหม บางทีคำตอบของ Googletorp ไม่สามารถแก้ปัญหาเฉพาะของคุณได้ แต่ในกรณีนี้คุณต้องอธิบายให้ละเอียดและอธิบายว่าทำไม
marcvangend

@marcvangend แม้ว่ามันจะสาย แต่ฉันได้ตระหนักว่าไม่ใช่คำตอบสำหรับคำถามของฉัน หวังว่าบางคนสามารถเพิ่มคำตอบที่ดีกว่า
Fahad Ur Rehman

@Fahad เพื่อรับคำตอบที่ดีกว่าคุณต้องถามคำถามที่ดีกว่า คำตอบของ Googletorp ดูเหมือนจะเป็นทางออกที่ดีสำหรับฉันและ upvotes ดูเหมือนจะเห็นด้วย หากไม่สามารถแก้ปัญหาได้ให้เข้าไปและแก้ไขคำถามของคุณเพิ่มรายละเอียดที่เกี่ยวข้องทั้งหมด
marcvangend

@marcvangend ปัญหาของฉันจริงได้รับการแก้ไขและฉันยอมรับคำตอบก่อนหน้านี้ แต่ในความคิดเห็นของคุณ Googletorps มีชื่อเสียงสูงมากไม่ได้รับความแตกต่างถ้าฉันยอมรับหรือไม่ยอมรับคำตอบของเขา เขาให้ทางเลือกที่ยอดเยี่ยมซึ่งฉันได้โหวตให้เขาด้วย
Fahad Ur Rehman

@Fahad จากคำตอบที่คุณพูด: คำตอบนี้แก้ปัญหาของฉันได้ มันเป็นแถลงการณ์ที่ทรงพลังและมีประโยชน์มากสำหรับผู้มาเยี่ยมชมเพื่อดูว่าคำตอบนั้นมีประโยชน์หรือไม่ หากคำตอบของฉันไม่ได้แก้ปัญหาของคุณคุณควรแก้ไขคำถามของคุณและโพสต์รายละเอียดเกี่ยวกับสาเหตุที่โซลูชันของฉันไม่ทำงานสำหรับคุณและอย่างที่ marcvangend กล่าวเพิ่มรายละเอียดเพิ่มเติม
googletorp

3

หากเรายกเลิกการเผยแพร่โหนดที่เพิ่มโดย user1 พวกเขาจะไม่สามารถแก้ไขได้โดยผู้ใช้คนอื่น ๆ แม้ว่าผู้ใช้จะมีสิทธิ์ในการแก้ไขเนื้อหาของประเภทเนื้อหานั้น

จำกัด การดูหน้าเว็บของโหนดดูเหมือนจะเป็นวิธีที่ดีกว่าในการ จำกัด การเข้าถึงโดยตรงไปยังโหนดใด ๆ ของประเภทเนื้อหาที่เฉพาะเจาะจง

การใช้งานนั้นค่อนข้างง่ายคุณเพียงแค่ต้องเปิดใช้งานโมดูลนี้และกำหนดค่าการอนุญาตสำหรับโหนดที่สามารถเข้าถึงได้โดยตรงตามปกติ

http://drupal.org/project/restrict_node_page_view

จากหน้าโครงการ:

คุณเคยใช้ nodetype สไลด์โชว์ที่คุณต้องการเผยแพร่ แต่ไม่ต้องการให้โหนดสามารถเข้าถึงได้ด้วยตัวเองโดยใช้เส้นทาง node / XXX โมดูลนี้เหมาะสำหรับคุณ!

ด้วยโมดูลนี้คุณสามารถปิดการใช้งานการเข้าถึงโดยตรงไปยังหน้าโหนด (โหนด / XXX) ขึ้นอยู่กับโหนดและสิทธิ์

เปิดใช้งานโมดูลและอย่าลืมกำหนดค่าการอนุญาตของคุณ


1

อีกโมดูลหนึ่งที่ทำสิ่งเดียวกัน แต่มีฟังก์ชันการใช้มากกว่า

โพรงกระต่าย

ผู้ดูแลโครงการนี้ขอให้ผู้ดูแล "จำกัด การดูหน้าโหนด" เพื่อรวมโครงการในปัญหา

ข้อดีกับ "จำกัด การดูหน้าโหนด":

  • ฟังก์ชั่นหลักเหมือนกันบนโหนด แต่สามารถขยายได้สำหรับผู้ใช้ / ไฟล์ / ข้อกำหนดด้านอนุกรมวิธาน
  • สามารถใช้ในโมดูลของคุณ
  • สามารถใช้ได้ทั่วโลกกับประเภทเนื้อหาหรือทุกเนื้อหา
  • ดูเพิ่มเติมในหน้าโครงการ ...

ข้อเสียกับ "จำกัด การดูหน้าโหนด":

  • รหัสเพิ่มเติมอาจมีประสิทธิภาพน้อยกว่า (ต้องการการทดสอบไม่ได้รับการพิสูจน์)

1

คุณควรใช้มีตัวเลือกบางอย่างที่คุณสามารถดำเนินการโดยใช้node_access() hook_node_access()การนำไปใช้node_access()ช่วยให้คุณสามารถตัดสินใจได้ว่าใครสามารถเข้าถึงโหนดและใครสามารถสร้างลบแก้ไขหรืออัปเดตโหนดดังกล่าวได้ อย่างไรก็ตามมุมมองยังคงสามารถดึงข้อมูลจากโหนดเหล่านี้ได้

hook_node_access () , node_access ()


0

แรงบันดาลใจจากhttps://www.drupal.org/project/restrict_node_page_viewคุณอาจจะเขียนโมดูลขนาดเล็กด้วยตัวเอง:

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

โมดูลนี้ถูกกล่าวถึงสองสามปีที่ผ่านมา คุณช่วยอธิบายสิ่งที่คำตอบใหม่ของคุณเกี่ยวกับเรื่องนี้ได้หรือไม่
Mołot

@ Mołot - ... เพื่อเขียนโมดูลด้วยตัวเอง แก้ไขคำตอบแล้ว
leymannx

0

การใช้โมดูลกฎคุณสามารถใช้กฎที่มีลักษณะคล้ายกับสิ่งนี้:

{ "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" } }
    ]
  }
}

กฎข้างต้นยังไม่ได้คำนึงถึงการใช้ "การกระทำ" สำหรับบทบาทที่เลือกเท่านั้น (เช่นเพื่อให้ผู้ดูแลระบบยังคงสามารถใช้เส้นทางเหล่านี้เพื่อดูโหนด) แต่สำหรับทุกคนที่คุ้นเคยกับโมดูลกฎนั่นคือ "เงื่อนไข" ต่อไปเพื่อเพิ่ม ...

หากต้องการทดสอบกับกฎนี้ในเว็บไซต์ของคุณเพียงคัดลอกรหัสกฎทั้งหมดด้านบนและวางในกฎใหม่ในเว็บไซต์ของคุณสร้างขึ้นผ่านฟังก์ชั่น "นำเข้า" จากนั้นแก้ไข / ปรับแต่งเพิ่มเติมเพื่อให้เหมาะสมกับสภาพแวดล้อมของคุณ (เช่นข้อความ "ขออภัย ... " ที่จะแสดง)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.