Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#issue-144/user create security #153

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

#issue-144/user create security #153

wants to merge 1 commit into from

Conversation

gorzki
Copy link
Contributor

@gorzki gorzki commented Mar 12, 2018

Pytanie ->

  • Obecnie przekazuje error jako ["Field #{name} is required"]. Ale jak wolałbym by to było [{ :error, "Message" }], mialem problem z wyswietleniem tego jak json. Miałeś może podobny problem?.

W chwili obecnej ogarnia pojedyncze obiekty, jeżeli obiekt zawiera listę obiektów sprawdzi tylko jeden. Będzie do rozbudowy w (Order, Products)? gdzie wysyłana jest lista. W takim przypadku trzeba dodac jeszcze jedna metode która sprawdzi czy to jest lista argumentów i odpowiednio przekieruje do pozostałych metod

Copy link
Contributor

@sciolkowski sciolkowski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dokończę to review w przyszłym tygodniu

@@ -2,6 +2,15 @@ defmodule Perseids.CustomerController do
use Perseids.Web, :controller
import Perseids.Gettext

defstruct(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gorzki IMO lepiej będzie zrobić model bez kolekcji w bazie (analogicznie jak modele PORO w Rails), a dla tych co mają bazę i będziemy je chcieli walidować po prostu dodamy defstruct. Generalnie spoko pomysł z wykorzystanie structa 👍 Po prostu nie róbmy go dla całego kontrolera.

@@ -61,4 +74,109 @@ defmodule Perseids.CustomerController do
defp maybe_put_key(true, params, key, value), do: Map.put(params, key, value)
defp maybe_put_key(false, params, _key, _value), do: params

defp check_is_valid?(struct, errors \\ []) do
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gorzki Całą logikę walidacji trzeba umieścić w oddzielnym module, który będzie działał na zasadzie przyjmowania structa i paramsów i zwracał co trzeba. Dzięki temu będziemy go mogli używać gdzie zechcemy w jasny sposób.

Copy link
Contributor

@sciolkowski sciolkowski left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ogólnie nie za bardzo wiem co o tym myśleć.
Na pewno działa, ale kod wydaje mi się tak zawiły, że będzie nieutrzymywalny.

Sam pomysł ze structem, do którego będzie porównywany dany changeset (bo to wszystko powinno trafić do modelu), jest wg mnie bardzo dobry, natomiast implementacja mnie przeraża :) Nie chodzi o całokształt, ale głównie o funkcje get_key i check_key - zwyczajnie nie jestem w stanie załapać co robią.

Nie chcę tego dołączać do mastera, a jednocześnie nie chcę tego tracić, bo to, w połączeniu z walidacjami w order.ex może być niezłym punktem wyjścia do solidnego modułu walidacji.

Proponowałbym Ci w "wolnej chwili" jakoś uprościć te dwie funkcje o których wspomniałem a potem spróbować wyodrębnić to do oddzielnego modułu, przenieść structa do modelu, w modelu użyć tej walidacji w stylu struct vs changeset. Jeśli wtedy zadziała wszystko ładnie - lećmy w to. Jeśli nie to trzeba to zrobić inaczej.

@sciolkowski sciolkowski removed their assignment Mar 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants