it-swarm-id.com

Bagaimana cara membatasi akses langsung ke node?

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?

12
Fahad Ur Rehman

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.

Batasi Node Tampilan Halaman tampaknya cara yang lebih baik untuk membatasi akses langsung ke node apa pun dari 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 simpul (simpul/XXX) berdasarkan nodetypes dan izin.

Aktifkan modul dan jangan lupa untuk mengkonfigurasi izin Anda.

3
Fahad Ur Rehman

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

12
googletorp

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

Lubang Kelinci

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

Keuntungan terhadap "Batasi Node Tampilan 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 Node Tampilan Halaman":

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

anda harus menggunakan node_access(), ada beberapa opsi yang dapat Anda implementasikan dengan mudah menggunakan hook_node_access(). Menerapkan node_access() memungkinkan Anda 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 ()

1
gauravjeet

Menggunakan modul Aturan Anda dapat menerapkan aturan yang 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" hanya untuk peran yang dipilih (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).

0
Pierre.Vriens

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

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