Ketika saya membaca Dokumen Laravel tentang bagian topik ORM yang fasih, saya mendapat istilah baru Mass Assignment
.
Dokumen menunjukkan Bagaimana melakukan Penugasan Massal dan fillable
atau guarded
pengaturan properti. Tetapi setelah melalui itu, saya tidak memiliki pemahaman yang jelas tentang Mass Assignment
dan bagaimana cara kerjanya.
Dalam pengalaman masa lalu saya di CodeIgniter, saya juga tidak mendengar tentang istilah ini.
Adakah yang punya penjelasan sederhana tentang itu?
php
laravel
mass-assignment
Chen-Tsu Lin
sumber
sumber
Jawaban:
Tugas massal adalah ketika Anda mengirim array ke pembuatan model, pada dasarnya pengaturan sekelompok bidang pada model dalam sekali jalan, bukan satu per satu, seperti:
(Ini bukannya secara eksplisit menetapkan setiap nilai pada model secara terpisah.)
Anda dapat menggunakan
fillable
untuk melindungi bidang mana yang Anda inginkan ini benar-benar memungkinkan untuk memperbarui.Anda juga dapat memblokir semua bidang agar tidak dapat ditentukan secara massal dengan melakukan ini:
Katakanlah dalam tabel pengguna Anda, Anda memiliki bidang yang
user_type
dan yang dapat memiliki nilai-nilai pengguna / adminJelas, Anda tidak ingin pengguna dapat memperbarui nilai ini. Secara teori, jika Anda menggunakan kode di atas, seseorang dapat menyuntikkan ke formulir bidang baru untuk
user_type
dan mengirim 'admin' bersama dengan data formulir lainnya, dan dengan mudah beralih akun mereka ke akun admin ... berita buruk.Dengan menambahkan:
Anda memastikan bahwa hanya nilai-nilai itu yang dapat diperbarui menggunakan
mass assignment
Agar dapat memperbarui
user_type
nilai, Anda perlu menetapkannya secara eksplisit pada model dan menyimpannya, seperti ini:sumber
$user = new User(Input::all());
(sebagai programmer) itu sangat tidak terkendali (atau dalam skenario apa ini akan sangat membantu).$user = new User; $user->name = 'Neo';
Penugasan massal adalah proses pengiriman array data yang akan disimpan ke model yang ditentukan sekaligus. Secara umum, Anda tidak perlu menyimpan data pada model Anda satu per satu, tetapi dalam satu proses.
Tugas massal baik, tetapi ada masalah keamanan tertentu di belakangnya. Bagaimana jika seseorang memberikan nilai pada model dan tanpa perlindungan mereka pasti dapat memodifikasi semua bidang termasuk ID. Itu tidak baik.
Katakanlah Anda memiliki tabel 'student', dengan bidang "student_type, first_name, last_name" . Anda mungkin ingin menetapkan "first_name, last_name" secara massal tetapi Anda ingin melindungi student_type agar tidak langsung diubah. Di situlah tempat yang dapat diisi dan dijaga berlangsung.
Dapat diisi memungkinkan Anda menentukan bidang mana yang dapat ditentukan secara massal dalam model Anda, Anda dapat melakukannya dengan menambahkan variabel khusus
$fillable
ke model. Jadi dalam model:' student_type ' tidak termasuk, yang berarti mereka dikecualikan.
Dijaga adalah kebalikan dari bisa diisi. Jika bisa diisi menentukan bidang mana yang akan ditetapkan secara massal, dijaga menentukan bidang mana yang tidak dapat ditentukan secara massal. Jadi dalam model:
Anda harus menggunakan $ fillable atau $ guarded - tidak keduanya.
Untuk lebih jelasnya buka tautan: - Penugasan Massal
sumber
Tugas massal berarti Anda mengisi baris dengan lebih dari satu kolom menggunakan larik data. (agak jalan pintas bukannya secara manual membangun array) menggunakan
Input::all()
.Secara teknis hanya dari atas kepalaku. Dapat diisi berarti kolom apa dalam tabel yang boleh dimasukkan, dijaga berarti model tidak dapat disisipkan ke kolom tertentu.
Perhatikan bahwa ketika Anda mencoba untuk melakukan tugas massal dengan suka, masukkan ke kolom bernama "rahasia", dan Anda telah menentukan bahwa itu dijaga, Anda dapat mencoba memasukkannya melalui model, tetapi itu tidak akan pernah benar-benar dimasukkan ke dalam data.
Ini untuk keamanan, dan perlindungan di meja Anda saat menggunakan model. Tugas massal tampaknya hanya pemberitahuan atau peringatan bahwa Anda tidak memberi tahu model mana yang bisa diisi dan dijaga dan membuatnya rentan terhadap beberapa jenis serangan.
sumber
Ini adalah saat array data yang diterima disimpan sekaligus dalam suatu model.
Karena masalah keamanan dengan metode ini di laravel, Anda disarankan untuk menentukan bidang yang Anda inginkan untuk diisi data pada Model.
Anda bisa menggunakan
$fillable
variabel untuk menentukan bidang yang ingin Anda isi pada tabel database.Misalnya
Ketika laravel mendeteksi Anda menetapkan data secara massal, itu memaksa Anda untuk menentukan bidang yang ingin Anda tetapkan secara massal di kelas model.
Seseorang dapat dengan mudah mengirimkan data yang tidak diinginkan ke dalam bentuk html ke database Anda.
sumber