Als ich das Laravel-Dokument zum Thema Eloquent ORM durchgesehen habe, habe ich einen neuen Begriff erhalten Mass Assignment
.
Dokument zeigen, wie die Massenzuweisung durchgeführt wird, und die Einstellungen fillable
oder guarded
Eigenschaften. Aber nachdem ich das durchgemacht hatte, hatte ich kein klares Verständnis dafür Mass Assignment
und wie es funktioniert.
In meiner bisherigen Erfahrung mit CodeIgniter habe ich auch nichts von diesem Begriff gehört.
Hat jemand eine einfache Erklärung dafür?
php
laravel
mass-assignment
Chen-Tsu Lin
quelle
quelle
Antworten:
Die Massenzuweisung erfolgt, wenn Sie ein Array an die Modellerstellung senden und im Grunde genommen eine Reihe von Feldern auf dem Modell in einem einzigen Durchgang anstatt nacheinander festlegen.
(Dies bedeutet, dass nicht explizit jeder Wert im Modell separat festgelegt wird.)
Sie können
fillable
damit schützen, welche Felder tatsächlich aktualisiert werden sollen.Sie können auch verhindern, dass alle Felder massenzuweisbar sind, indem Sie Folgendes tun:
Angenommen, Sie haben in Ihrer Benutzertabelle ein Feld,
user_type
das die Werte user / admin enthalten kannNatürlich möchten Sie nicht, dass Benutzer diesen Wert aktualisieren können. Wenn Sie den obigen Code verwenden, könnte jemand theoretisch ein neues Feld in ein Formular einfügen
user_type
und 'admin' zusammen mit den anderen Formulardaten senden und sein Konto einfach auf ein Administratorkonto umstellen ... schlechte Nachrichten.Beim Hinzufügen:
Sie stellen sicher, dass nur diese Werte mit aktualisiert werden können
mass assignment
Um den
user_type
Wert aktualisieren zu können , müssen Sie ihn explizit für das Modell festlegen und wie folgt speichern:quelle
$user = new User(Input::all());
(als Programmierer), dass es so unkontrolliert ist (oder in welchem Szenario wäre dies hilfreich).$user = new User; $user->name = 'Neo';
Bei der Massenzuweisung wird ein Array von Daten gesendet, die sofort im angegebenen Modell gespeichert werden. Im Allgemeinen müssen Sie die Daten Ihres Modells nicht einzeln speichern, sondern in einem einzigen Prozess.
Die Massenzuweisung ist gut, aber es gibt bestimmte Sicherheitsprobleme. Was ist, wenn jemand einen Wert an das Modell übergibt und ohne Schutz definitiv alle Felder einschließlich der ID ändern kann? Das ist nicht gut.
Angenommen, Sie haben eine ' Schülertabelle ' mit den Feldern "Schülertyp, Vorname, Nachname" . Sie möchten möglicherweise "Vorname, Nachname" massenweise zuweisen, aber Sie möchten den Schülertyp vor einer direkten Änderung schützen . Hier finden ausfüllbare und geschützte statt.
Mit Fillable können Sie angeben, welche Felder in Ihrem Modell massenzuweisbar sind. Sie können dies tun, indem Sie
$fillable
dem Modell die spezielle Variable hinzufügen . Also im Modell:Der ' student_type ' ist nicht enthalten, was bedeutet, dass sie ausgenommen sind.
Geschützt ist die Rückseite von füllbar. Wenn ausfüllbar angibt, welche Felder massenweise zugewiesen werden sollen, gibt bewacht an, welche Felder nicht massenzuweisbar sind. Also im Modell:
Sie sollten entweder $ fillable oder $ guarded verwenden - nicht beide.
Für weitere Details öffnen Sie den Link: - Massenzuweisung
quelle
Massenzuweisung bedeutet, dass Sie eine Zeile mit mehr als einer Spalte unter Verwendung eines Datenarrays füllen. (eine Art Verknüpfung, anstatt das Array manuell zu erstellen) using
Input::all()
.Technisch gesehen nur von oben. Füllbar bedeutet, welche Spalten in der Tabelle eingefügt werden dürfen. Geschützt bedeutet, dass das Modell nicht in diese bestimmte Spalte eingefügt werden kann.
Beachten Sie, dass Sie, wenn Sie versuchen, eine Massenzuweisung mit like durchzuführen, in eine Spalte mit dem Namen "secret" einfügen und angegeben haben, dass sie geschützt ist, versuchen können, sie über das Modell einzufügen, sie wird jedoch nie wirklich eingefügt die Datenbank.
Dies dient der Sicherheit und dem Schutz Ihres Tisches bei Verwendung des Modells. Die Massenzuweisung scheint nur ein Hinweis oder eine Warnung zu sein, dass Sie dem Modell nicht mitgeteilt haben, welche ausfüllbar und geschützt sind, und dass es für Angriffe anfällig ist.
quelle
In diesem Fall wird ein Array empfangener Daten gleichzeitig in einem Modell gespeichert.
Aufgrund der Sicherheitsprobleme mit dieser Methode in Laravel wird empfohlen, die Felder zu definieren, in die die angeforderten Daten im Modell eingefügt werden sollen.
Mit der
$fillable
Variablen können Sie die Felder definieren, die Sie in die Datenbanktabelle einfügen möchten.Z.B
Wenn Laravel feststellt, dass Sie Daten zuweisen, müssen Sie die Felder definieren, die Sie in der Modellklasse massenweise zuweisen möchten.
Jemand kann leicht unerwünschte Daten in ein HTML-Formular an Ihre Datenbank übergeben.
quelle