Bagaimana cara membatasi akses langsung ke node?

12

Bagaimana membatasi akses langsung ke node tetapi hanya memungkinkan pandangan untuk mengakses bidang yang diperlukan dari jenis node tertentu?

Sebagai contoh di Tampilan Slideshow kami menggeser bidang gambar yang termasuk jenis simpul tertentu. Tapi kami tidak ingin mesin pencari mengakses & pengunjung mengakses node milik tipe node itu.

Ada saran?

Fahad Ur Rehman
sumber

Jawaban:

12

Solusi sederhana adalah dengan tidak mempublikasikan node yang Anda tidak ingin dapat diakses. Tampilan masih dapat menarik data dari node tersebut.

googletorp
sumber
1
Terlalu sederhana? Tidak ada yang namanya 'solusi terlalu sederhana'. Kompleksitas bukanlah tujuan itu sendiri, bukan? Mungkin jawaban Googletorp tidak menyelesaikan masalah spesifik Anda, tetapi dalam hal ini Anda harus lebih rumit dan menjelaskan mengapa tidak.
marcvangend
@marcvangend Meskipun sudah terlambat tapi saya sadar itu bukan jawaban dari pertanyaan saya. Semoga seseorang dapat menambahkan jawaban yang lebih baik
Fahad Ur Rehman
@Fahad Untuk mendapatkan jawaban yang lebih baik, Anda perlu mengajukan pertanyaan yang lebih baik. Jawaban Googletorp terlihat seperti solusi yang baik untuk saya, dan upvotes tampaknya setuju. Jika itu tidak menyelesaikan masalah Anda, masuk dan edit pertanyaan Anda, tambahkan semua detail yang relevan.
marcvangend
@marcvangend sebenarnya masalah saya telah diatasi dan saya menerima jawaban sebelumnya tetapi mengingat komentar Anda. Googletorps memiliki reputasi yang sangat tinggi, tidak ada bedanya jika saya menerima atau tidak menerima jawabannya. Dia memberikan solusi alternatif yang sangat baik yang juga saya pilih.
Fahad Ur Rehman
@ Fahad Dengan menerima sebuah jawaban yang Anda katakan: jawaban ini memecahkan masalah saya. Ini pernyataan yang kuat dan sangat berguna bagi pengunjung untuk datang, untuk mengetahui apakah suatu jawaban bermanfaat atau tidak. Jika jawaban saya tidak menyelesaikan masalah Anda, maka Anda harus mengedit pertanyaan Anda dan memposting beberapa detail mengapa solusi saya tidak bekerja untuk Anda dan seperti kata marcvangend, tambahkan lebih detail.
googletorp
3

Jika kami membatalkan publikasi node yang ditambahkan oleh pengguna1 mereka tidak akan dapat diedit oleh pengguna lain bahkan jika pengguna memiliki hak untuk mengedit konten dari jenis konten tersebut.

Membatasi Tampilan Halaman Node tampaknya merupakan cara yang lebih baik untuk membatasi akses langsung ke node jenis konten tertentu.

Penggunaannya juga cukup sederhana, Anda hanya perlu mengaktifkan modul ini dan mengkonfigurasi izin untuk node yang langsung dapat diakses seperti biasa.

http://drupal.org/project/restrict_node_page_view

Dari halaman proyek:

Pernahkah Anda menggunakan slideshow tipe slide yang perlu Anda publikasikan tetapi tidak ingin simpulnya dapat diakses sendiri menggunakan jalur node / XXX? Modul ini untuk Anda!

Dengan modul ini Anda dapat menonaktifkan akses langsung ke halaman node (node ​​/ XXX) berdasarkan nodetypes dan izin.

Aktifkan modul dan jangan lupa untuk mengkonfigurasi izin Anda.

Fahad Ur Rehman
sumber
1

Modul lain yang melakukan hal yang sama tetapi dengan lebih banyak fungsi.

Lubang kelinci

Pemelihara proyek ini meminta "Batasi Tampilan Node Halaman" Pemelihara untuk menggabungkan proyek dalam masalah.

Keuntungan terhadap "Batasi Tampilan Node Halaman":

  • Fungsionalitas utama yang sama pada node tetapi dapat diperluas untuk istilah pengguna / file / taksonomi
  • Dapat digunakan dalam modul Anda
  • Dapat bersifat global ke tipe konten atau pada setiap konten
  • Lihat lebih lanjut di halaman proyek ...

Kerugian terhadap "Batasi Tampilan Node Halaman":

  • Lebih banyak kode jadi mungkin kurang efektif (perlu tes, tidak terbukti)
Payou
sumber
1

Anda harus menggunakan node_access(), ada beberapa opsi yang dapat Anda implementasikan dengan mudah hook_node_access(). Menerapkan node_access()memungkinkan Anda untuk membuat keputusan tentang siapa yang dapat mengakses node dan siapa yang dapat membuat, menghapus, mengedit, atau memperbarui node tersebut. Tampilan, bagaimanapun, masih dapat menarik data dari node ini sama sekali.

hook_node_access () , node_access ()

gauravjeet
sumber
0

Terinspirasi oleh https://www.drupal.org/project/restrict_node_page_view Anda dapat menulis modul kecil sendiri:

/**
 * 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;
}
leymannx
sumber
Modul ini sudah disebutkan beberapa tahun yang lalu. Bisakah Anda menjelaskan apa yang baru dibawa oleh jawaban Anda pada subjek?
Mołot
@ Mołot - ... untuk menulis modul sendiri. Jawaban yang diedit.
leymannx
0

Menggunakan modul Aturan Anda dapat menerapkan aturan yang terlihat mirip dengan ini:

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

Aturan di atas tidak (belum) memperhitungkan untuk hanya menerapkan "tindakan" untuk peran yang dipilih saja (misalnya agar admin masih dapat menggunakan jalur ini untuk melihat node). Tetapi bagi siapa pun yang sedikit terbiasa dengan modul Aturan, itu adalah "Ketentuan" untuk menambahkan ...

Untuk bereksperimen dengan aturan ini di situs Anda sendiri, cukup salin seluruh kode Aturan di atas, dan rekatkan dalam Aturan baru di situs Anda sendiri, yang dibuat melalui fungsi "Impor". Kemudian edit / sempurnakan lebih lanjut agar sesuai dengan lingkungan Anda sendiri (mis. Pesan "Maaf, ..." yang akan ditampilkan).

Pierre
sumber