Modul tampilan: Cara membatasi akses oleh pengguna

8

Saya menggunakan modul Views untuk membuat tampilan yang hanya dapat diakses oleh pengguna tertentu. Saya tahu bahwa Tampilan menyertakan kontrol akses berdasarkan peran atau izin, tetapi saya memerlukan sesuatu yang lebih halus: Pada dasarnya, saya ingin dapat mengatakan hanya pengguna "x" dan pengguna "y" yang dapat mengakses tampilan tertentu (atau seseorang dengan peran administrator situs). Jadi ini berfungsi sangat mirip dengan bagaimana modul ACL bertindak untuk masing-masing node.

Apakah pendekatan terbaik untuk membuat plugin akses tampilan khusus? Saya tidak punya banyak pengalaman dengan ini.

Juga, saya bertanya-tanya tentang menggunakan argumen dengan beberapa validasi untuk mencapai ini (sehingga saya tidak harus membuat lusinan tampilan terpisah). Misalnya, karena tampilan ini akan menjadi tab pada jalur simpul tertentu, saya ingin tahu tentang menyiapkan bidang referensi pengguna pada simpul itu yang menentukan siapa yang bisa melihat tampilan. Saya hanya perlu cara agar tampilan hanya memvalidasi jika pengguna saat ini sama dengan pengguna yang ditentukan dalam bidang referensi pengguna.

Ada ide? Atau apakah saya membuat ini lebih rumit dari yang seharusnya?

Terima kasih, Ben

Benk
sumber
Anda mungkin harus menulis plugin akses tampilan tetapi jika Anda dapat memperbarui pertanyaan Anda dengan sedikit lebih detail maka mungkin Anda bisa mencapainya dengan cara lain. Apa yang dilakukan tampilan / tampilan? Pengguna mana yang diizinkan untuk melihatnya? Apakah pengguna memiliki peran yang berbeda? Apakah pengguna memiliki bidang tertentu atau sesuatu yang terkait dengannya yang memungkinkan mereka mengaksesnya?
Jamie Hollern
Jamie, Terima kasih atas jawabannya. Sebenarnya, saya juga menggunakan Drupal Commerce untuk membuat toko online yang unik. Sebagai tab pada setiap simpul produk (selain tab Lihat dan Edit), saya ingin membuat tab tambahan yang disebut "Pesanan" yang akan menjadi tampilan yang menunjukkan semua pesanan yang telah menyertakan produk tertentu. Pemasok produk tertentu adalah pengguna yang saya ingin dapat melihat tampilan "Pesanan" untuk produk itu.
BenK
Dengan cara ini, pemasok dapat memonitor penjualan produk mereka secara berkelanjutan. Tetapi saya tidak ingin memberikan akses kepada semua orang dengan peran "pemasok" karena dengan demikian pemasok mana pun akan dapat melihat penjualan produk pemasok lain. Masuk akal? ;-) --Ben
BenK

Jawaban:

5

Alih-alih membatasi izin pada Tampilan, Anda bisa membatasi izin pada item menu yang mengarah ke tampilan itu (baik itu tab pada node atau panggilan balik menu). Anda dapat membuat tampilan hanya dengan tampilan "Default" dan tanpa tampilan Halaman (sehingga pengguna tidak bisa mengetahui jalurnya). Kemudian di page callbackitem menu Anda hanya memanggil views_embed_viewuntuk menampilkan tampilan. Sepertinya menangani izin pada item menu mungkin lebih mudah daripada menulis plug-in baru untuk Views (meskipun plug-in dapat membantu orang lain).

Chaulky
sumber
Terima kasih untuk sarannya! Saya akhirnya mengikuti pendekatan umum ini (yang juga disarankan oleh Berdir), tetapi membuat bidang referensi pengguna pada setiap node yang disebut field_usercanaccess. Saya dapat menggunakan hook_menu () dan mendefinisikan panggilan balik akses yang memastikan pengguna saat ini cocok dengan pengguna yang dirujuk di bidang. Jika tidak, tab (dan tampilan) tidak akan ditampilkan. Ini bekerja dengan baik! :-)
BenK
@BenK, luar biasa! Saya senang Anda punya sesuatu yang berfungsi. Sebagai bagian dari membantu menjadikan Drupal Answers sebagai sumber yang bagus, Anda juga harus memberikan suara untuk jawaban (atau pertanyaan) yang Anda temukan bermanfaat. Jadi Anda mungkin harus memilih jawaban @ Berdir (dan milik saya, tetapi ini bukan saya yang mencoba mendapatkan suara, itu mencoba membuat Drupal Answers menjadi situs yang lebih baik)
Chaulky
Terima kasih. :-) Saya baru di Stack Exchange dan saya hanya punya 13 poin. Ketika saya mencoba untuk memilih, dikatakan saya perlu 15 poin untuk memilih. Jadi, jika seseorang memiliki dua poin cadangan (atau saya bisa mendapatkan mereka dengan cara lain) saya pasti akan memilih jawaban dan pertanyaan. --Ben
BenK
@BenK oh benar, saya lupa tentang batas 15 poin. Anda selalu dapat mencoba menjawab pertanyaan ... satu upvote pada jawaban Anda mendapat 10 rep.
Chaulky
6

Coba modul Panggilan Balik Akses Views .

Menyediakan kontrol akses berbasis panggilan balik untuk Views.

Fungsi panggilan balik yang tersedia ditentukan oleh modul menggunakan hook_views_access_callbacks()fungsi (dengan cara yang sama seperti pada hook_perm()), kemudian dapat diatur dalam konfigurasi "Pembatasan akses" tampilan.

pengguna5318
sumber
Menggunakan tampilan akses panggilan balik berfungsi dengan baik kecuali untuk kesalahan fatal aneh. Lihat di sini: drupal.stackexchange.com/questions/3336/… . Sepertinya cara untuk pergi - tetapi bagaimana cara memperbaikinya?
Druvision
2

Saya pasti melewatkan sesuatu, tetapi sepertinya Anda akan membuat peran baru dan menambahkan Pengguna ini. Kemudian gunakan fitur Views 'Access: Role.

Jika Anda perlu mengikat hak akses ke sesuatu dalam konten, saya akan menggunakan akses Views kustom, yang saya temukan menyulitkan pengaturan pertama kali, tetapi menghargai fleksibilitas setelah bekerja. Jika View menghasilkan Item Menu, View tidak akan muncul jika View tidak melewati fungsi akses.

Jika Anda hanya menyembunyikan item menu, menurut saya tampilan akan tetap berjalan dan Pengguna dapat mengubah URI untuk melihat data.

Jerry

Jerry
sumber
1

Bagaimana dengan menggunakan modul Izin Kustom untuk membuat beberapa izin baru khusus untuk tujuan Anda, dan kemudian menggunakan modul Izin Pengguna untuk menetapkan izin baru tersebut untuk masing-masing pengguna?

Modul izin khusus sangat ringan. Saya tidak begitu yakin tentang modul izin Pengguna, karena pada dasarnya menciptakan peran baru untuk setiap pengguna di belakang layar (peran ini tidak terlihat pada halaman izin utama). Jika Anda memiliki banyak pengguna, ini mungkin sedikit meningkatkan ukuran peran Anda dan tabel user_roles.

Tom Kirkpatrick
sumber
Itu saran yang menarik untuk menggunakan Izin Kustom. Saya belum melihat modul itu karena menjadi lebih luas dari hanya Izin Konfigurasi Situs. Satu-satunya komplikasi di sini adalah bahwa saya melakukan semua ini di Drupal 7 (dan belum ada cabang resmi). Tetapi jika saya bisa membuatnya bekerja mungkin untuk menentukan izin dalam kontrol akses tampilan secara langsung (tanpa perlu modul Izin Pengguna). Terima kasih untuk sarannya! :-)
BenK
Saya akan mencobanya dan melaporkan kembali.
BenK
0

Benar, itu lebih masuk akal. Saya pikir Anda bisa (mungkin, tidak 100% yakin) menggunakan Tampilan dan argumen. Tetapkan argumen menjadi id pengguna yang diambil dari pengguna yang saat ini masuk dan buat argumen default tidak menampilkan apa pun. Itu seharusnya bisa melakukannya, meskipun saya tidak tahu seberapa aman itu akan adil. Jika Anda mencobanya, poskan kembali dan beri tahu saya perkembangan Anda.

Jamie Hollern
sumber
Ya, saya akan mencoba beberapa hal dan melaporkan kembali. Saya juga mencoba plugin akses tampilan dengan argumen, jadi kita akan lihat bagaimana kelanjutannya. Terima kasih.
BenK
0

Jika Anda ingin menggabungkan berbagai plugin akses di Views, Anda mungkin ingin melihat modul banyak akses Views .

Steven Jones
sumber