save modelu przyjmuje cała tablice z danymi które zostaną zapisane w bazie. Nie jest on jednak w stanie sprawdzić czy ktoś przypadkiem nie dopisał do formularz za pomocą np. FireBug'a jakiegoś dodatkowego pola którego dopisywać nie powinien. Oczywiście można w metodzie save dopisać listę dopuszczalnych pól ale jest to imho bardzo niewygodne. W tym momencie z pomocą przychodzi SecurityComponent. Poprzez proste dodanie go do aplikacji:public $components = array('Security');w momenci gdy tworzony będzie dowolny formularz doda on do niego token który będzie zawierał zakodowaną informację na temat pól jakie znajdują się w formularzu. Wszystko pięknie tyle, że podczas tworzenia tokenu Cake zakłada, że pola ukryte czyli takie które mają type = hidden nie będą zmieniały wartości. I tu pojawia się problem bo co zrobić jak ktoś wstawił sobie w formularzu kalendarz albo mapę Google i przed wysłaniem formularza chce zapisać w ukrytych polach nowe wartości? Za pewne można tworzyć zwykłe input'y i ukrywać je CSS'em ale nie o to chodzi. Naturalnie można temu zaradzić korzystając z możliwości ustawienia dla SecurityComponent wartości disabledFields:$this->Security->disabledFields = array('Model.pole_1','Model.pole_2');Wszystko byłoby pięknie gdyby nie fakt, że informację taką trzeba zawrzeć w metodzie beforeFilter() co trochę komplikuje sprawę w momencie gdy różne dane z jednego modelu edytujemy w różnych akcjach. Pewnie, że można dodać wszystkie pola jednocześnie ale czasami może przecież zdarzyć się tak że w jednej akcji na jakieś pole nie zwracamy uwagi a w innej w zależności od tego jaką ma ono wartość uzależniamy jakieś tam konkretne działania.I to właśnie jest mój zgrzyt który naturalnie można obejść na milion sposobów w 2 minuty, tworząc np. tablicę zawierającą nazwy akcji oraz listę pól jakie mają być dopisane do
disabledFields i w beforeFilter na podstawie nazwy akcji jaką chcemy wywołać dopisywać je do SecurityComponent.

1 komentarze:
Dobry artykuł.. zaoszczędził nam trochę szukania :)
Prześlij komentarz