Bagaimana pengguna dapat mengakses hanya satu node tertentu, dan tidak semua node dari jenis itu?


10

Saya memiliki pengguna dengan tampilan dan pengeditan hak untuk jenis konten tertentu. Ini memberikan hak istimewa kepada semua pengguna untuk melihat dan mengedit semua node dari jenis itu. Tapi sebenarnya, saya ingin membuat node unik untuk setiap pengguna, sehingga hanya pengguna yang dapat melihat dan mengeditnya. Bagaimana saya bisa melakukan ini di Drupal 7?


1
Maksud Anda bagaimana Anda bisa melakukannya dengan menggunakan modul, atau bagaimana Anda bisa melakukannya dengan menulis kode yang diperlukan?
kiamlaluno

Cara lain adalah menolak simpul menggunakan dan memperluas profil pengguna dengan bidang.
ya.teck

Sepertinya node ini per pengguna mungkin untuk memenuhi semacam persyaratan profil pengguna. Apakah harus berupa simpul yang terpisah, atau tidakkah lebih baik memperluas entitas pengguna itu sendiri dengan bidang tambahan?
Alfred Armstrong

Drupal 7 menghapus izin tampilan simpul per pengguna. Anda dapat membawa mereka kembali dengan modul ini drupal.org/project/node_view_permissions
giorgio79

gunakan modul "tautan nodeaccess" adalah drupal.org/project/nodeaccess saya berharap ini akan membantu Anda
Mahipal Purohit

Jawaban:


11

Menggunakan modul yang sudah ada, Anda bisa melakukannya dengan Content Access , yang (ketika digunakan bersama ACL ) memungkinkan untuk mengatur izin untuk mengakses node untuk setiap pengguna.
Ini berarti bahwa Anda perlu mengatur izin akses secara manual untuk setiap node.

Jika Anda secara manual membuat node, dan kemudian Anda ingin memastikan bahwa hanya pengguna yang ditetapkan sebagai pemilik node yang dapat melihat (dan mengedit) itu, maka Anda dapat membuat modul khusus (yang berarti modul yang digunakan untuk situs Anda), dan terapkan hook_node_access()sebagai berikut (kode telah ditulis untuk membuatnya lebih mudah dibaca):

function mymodule_node_access($node, $op, $account) {
  // We are interested to existing objects. When the node is being created, Drupal passed the node type instead of the node object. 
  if (is_object($node)) {
    $bool = (
      ($node->type == 'the node type you need to check') && 
      (($op == 'view') || ($op == 'update'))
    );
    if ($bool) {
      if ($account->uid == $node->uid) {
        return NODE_ACCESS_ALLOW;
      }
      else {
        return NODE_ACCESS_DENY;
      }
    }
  }

  return NODE_ACCESS_IGNORE;
}

Menggunakan implementasi pengait ini, Anda tidak perlu mengedit secara manual izin akses yang diberikan untuk setiap node dari jenis konten yang Anda buat. Mengubah pemilik node juga akan lebih mudah, karena Anda tidak perlu mengubah izin akses dari node itu; kode akan secara otomatis memberikan pembaruan dan melihat izin untuk pengguna yang ditetapkan sebagai pemilik (atau penulis) node.


5

Anda tidak memerlukan modul khusus atau kode khusus untuk melakukan ini. Cukup buat secara manual simpul-simpul itu, tetapkan pengguna yang sesuai sebagai pemilik (penulis) dari simpul-simpul itu dan tetapkan izin untuk tipe konten ini untuk mengedit konten sendiri saja (tidak mengedit konten apa pun dari jenis ini) dan Anda selesai.


1

Apa yang Anda bicarakan adalah kontrol akses simpul Drupal, yang merupakan subjek besar.

Dukungan built-in inti untuk kontrol akses node agak biasa, dan untuk mengontrol akses untuk melihat node berdasarkan peran, Anda harus menggunakan semacam modul kontrol akses node. Ada halaman di Drupal.org yang mencantumkan semua modul akses simpul , dengan masing-masing ulasan kapsul. Saya sarankan Anda melihat halaman itu untuk melihat apakah Anda dapat menemukan modul yang cocok untuk mengontrol akses.

The Flexi Akses Modul tampaknya menjadi modul yang paling cocok dengan kebutuhan Anda, sebagai yang fungsi utama adalah untuk membiarkan Anda mengontrol akses untuk pengguna individu, bukan oleh peran atau dengan istilah taksonomi.

Ini adalah modul kecil yang memungkinkan Anda mengatur ACL (daftar kontrol akses) untuk masing-masing pengguna. Ini pada dasarnya adalah antarmuka pengguna untuk modul ACL , jadi Anda perlu menginstalnya juga.

Ia tidak memiliki beberapa fitur dari modul kontrol akses yang lebih canggih, seperti Content Access , tetapi ia dikelola secara aktif dan saat ini tidak ada bug terbuka dalam antrian masalahnya.

Pengungkapan: Saya adalah pengelola Flexi Access.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.