Kiedy przeczytałem Laravel Document o części tematycznej Eloquent ORM, dostałem nowy termin Mass Assignment
.
Dokument pokazuje, jak wykonać przypisanie masowe i ustawienia właściwości fillable
lub guarded
. Ale po przejściu przez to nie miałem jasnego zrozumienia Mass Assignment
i jak to działa.
W moim poprzednim doświadczeniu w CodeIgniter również nie słyszałem o tym terminie.
Czy ktoś ma na ten temat proste wyjaśnienie?
php
laravel
mass-assignment
Chen-Tsu Lin
źródło
źródło
Odpowiedzi:
Masowe przypisanie ma miejsce, gdy wysyłasz tablicę do tworzenia modelu, w zasadzie ustawiając kilka pól w modelu za jednym razem, a nie pojedynczo, na przykład:
(Zamiast jawnie ustawiać każdą wartość w modelu osobno).
Możesz użyć,
fillable
aby zabezpieczyć, które pola mają faktycznie umożliwić aktualizację.Możesz również zablokować możliwość masowego przypisywania wszystkich pól, wykonując następujące czynności:
Powiedzmy, że w swojej tabeli użytkowników masz pole, które to jest
user_type
i może mieć wartości user / adminOczywiście nie chcesz, aby użytkownicy mogli aktualizować tę wartość. Teoretycznie, gdybyś użył powyższego kodu, ktoś mógłby wstrzyknąć do formularza nowe pole
user_type
i wysłać 'admin' wraz z innymi danymi formularza, a także łatwo przełączyć swoje konto na konto administratora ... zła wiadomość.Poprzez dodanie:
Zapewniasz, że tylko te wartości mogą być aktualizowane za pomocą
mass assignment
Aby móc zaktualizować
user_type
wartość, musisz jawnie ustawić ją w modelu i zapisać, na przykład:źródło
$user = new User(Input::all());
(jako programista) jest tak niekontrolowany (lub w jakim scenariuszu byłby taki pomocny).$user = new User; $user->name = 'Neo';
Masowe przypisanie to proces wysyłania tablicy danych, które zostaną od razu zapisane w określonym modelu. Ogólnie rzecz biorąc, nie musisz zapisywać danych w modelu pojedynczo, ale raczej w ramach jednego procesu.
Przydział masowy jest dobry, ale stoją za nim pewne problemy z bezpieczeństwem. Co jeśli ktoś przekaże wartość do modelu i bez ochrony może zdecydowanie zmodyfikować wszystkie pola łącznie z ID. To nie jest dobrze.
Załóżmy, że masz tabelę „uczniów” z polami „student_type, first_name, last_name” . Możesz chcieć masowo przypisać „first_name, last_name”, ale chcesz zabezpieczyć student_type przed bezpośrednią zmianą. To jest miejsce, w którym można wypełnić i pilnować .
Możliwość wypełnienia pozwala określić, które pola są przypisywane masowo w modelu, możesz to zrobić, dodając specjalną zmienną
$fillable
do modelu. A więc w modelu:„ student_type ” nie są uwzględnione, co oznacza, że są wyłączone.
Chroniony jest odwrotnością wypełnienia. Jeśli wypełnienie określa, które pola mają być przypisane masowo, chronione określa, które pola nie są przypisywane masowo. A więc w modelu:
powinieneś użyć $ fillable lub $ guarded - nie obu.
Aby uzyskać więcej informacji, otwórz link: - Przydział masowy
źródło
Przypisanie masowe oznacza, że wypełniasz wiersz więcej niż jedną kolumną przy użyciu tablicy danych. (coś w rodzaju skrótu zamiast ręcznego budowania tablicy) przy użyciu
Input::all()
.Technicznie tylko z czubka głowy. Możliwość wypełnienia oznacza, które kolumny w tabeli mogą być wstawiane, chronione oznacza, że model nie może wstawić do tej konkretnej kolumny.
Zauważ, że kiedy próbujesz wykonać przypisanie masy za pomocą like, wstaw do kolumny o nazwie "sekret" i określiłeś, że jest ona chroniona, możesz spróbować wstawić do niej przez model, ale tak naprawdę nigdy nie zostanie wstawiona do baza danych.
Ma to na celu zapewnienie bezpieczeństwa i ochrony Twojego stołu podczas korzystania z modelu. Masowe przypisanie wydaje się być tylko ostrzeżeniem lub ostrzeżeniem, że nie powiedziałeś modelowi, które są do wypełnienia i strzeżone, co czyni go podatnym na pewnego rodzaju ataki.
źródło
Dzieje się tak, gdy tablica otrzymanych danych jest zapisywana jednocześnie w modelu.
Ze względu na problemy z bezpieczeństwem związane z tą metodą w laravel, zaleca się zdefiniowanie pól, które mają być wypełnione żądanymi danymi w modelu.
Możesz użyć
$fillable
zmiennej do zdefiniowania pól, które chcesz wypełnić w tabeli bazy danych.Na przykład
Kiedy laravel wykryje, że masowo przypisujesz dane, zmusza cię do zdefiniowania pól, które chcesz przypisać masowo w klasie modelu.
Ktoś może łatwo przekazać niechciane dane do formularza HTML do Twojej bazy danych.
źródło