Skip to content

Commit 5a1b812

Browse files
landongrindheimbegedin
authored andcommitted
Remove JaResource from StripePlatformCustomerController (#1020)
1 parent 2cb10dd commit 5a1b812

3 files changed

Lines changed: 26 additions & 16 deletions

File tree

lib/code_corps/policy/policy.ex

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ defmodule CodeCorps.Policy do
7070
defp can?(%User{} = user, :show, %StripeConnectAccount{} = stripe_connect_account, %{}), do: Policy.StripeConnectAccount.show?(user, stripe_connect_account)
7171
defp can?(%User{} = user, :create, %StripeConnectAccount{}, %{} = params), do: Policy.StripeConnectAccount.create?(user, params)
7272
defp can?(%User{} = user, :update, %StripeConnectAccount{} = stripe_connect_account, %{}), do: Policy.StripeConnectAccount.update?(user, stripe_connect_account)
73+
defp can?(%User{} = current_user, :create, %StripePlatformCustomer{}, %{} = params),
74+
do: Policy.StripePlatformCustomer.create?(current_user, params)
75+
defp can?(%User{} = current_user, :show, %StripePlatformCustomer{} = stripe_platform_customer, %{}),
76+
do: Policy.StripePlatformCustomer.show?(current_user, stripe_platform_customer)
77+
7378

7479
defimpl Canada.Can, for: User do
7580
# NOTE: Canary sets an :unauthorized and a :not_found handler on a config level
@@ -104,9 +109,5 @@ defmodule CodeCorps.Policy do
104109

105110
def can?(%User{} = user, :show, %StripeConnectSubscription{} = stripe_connect_subscription), do: Policy.StripeConnectSubscription.show?(user, stripe_connect_subscription)
106111
def can?(%User{} = user, :create, %Changeset{ data: %StripeConnectSubscription{}} = changeset), do: Policy.StripeConnectSubscription.create?(user, changeset)
107-
108-
def can?(%User{} = user, :create, %Changeset{data: %StripePlatformCustomer{}} = changeset), do: Policy.StripePlatformCustomer.create?(user, changeset)
109-
def can?(%User{} = user, :show, %StripePlatformCustomer{} = stripe_platform_customer), do: Policy.StripePlatformCustomer.show?(user, stripe_platform_customer)
110-
111112
end
112113
end

lib/code_corps/policy/stripe_platform_customer.ex

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
defmodule CodeCorps.Policy.StripePlatformCustomer do
22
alias CodeCorps.StripePlatformCustomer
33
alias CodeCorps.User
4-
alias Ecto.Changeset
54

6-
def create?(%User{id: current_user_id}, %Changeset{changes: %{user_id: user_id}}), do: current_user_id == user_id
7-
def create?(%User{}, %Changeset{}), do: false
5+
def create?(%User{id: current_user_id}, %{"user_id" => user_id}), do: current_user_id == user_id
6+
def create?(%User{}, %{}), do: false
87

98
def show?(%User{admin: true}, %StripePlatformCustomer{}), do: true
109
def show?(%User{id: current_user_id}, %StripePlatformCustomer{user_id: user_id}), do: current_user_id == user_id
Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,28 @@
11
defmodule CodeCorpsWeb.StripePlatformCustomerController do
22
use CodeCorpsWeb, :controller
3-
use JaResource
43

5-
alias CodeCorps.StripePlatformCustomer
64
alias CodeCorps.StripeService.StripePlatformCustomerService
5+
alias CodeCorps.{StripePlatformCustomer, User}
76

8-
plug :load_and_authorize_resource, model: StripePlatformCustomer, only: [:show]
9-
plug :load_and_authorize_changeset, model: StripePlatformCustomer, only: [:create]
10-
plug JaResource
7+
action_fallback CodeCorpsWeb.FallbackController
8+
plug CodeCorpsWeb.Plug.DataToAttributes
9+
plug CodeCorpsWeb.Plug.IdsToIntegers
1110

12-
@spec model :: module
13-
def model, do: CodeCorps.StripePlatformCustomer
11+
@spec show(Conn.t, map) :: Conn.t
12+
def show(%Conn{} = conn, %{"id" => id} = params) do
13+
with %User{} = current_user <- conn |> Guardian.Plug.current_resource,
14+
%StripePlatformCustomer{} = stripe_platform_customer <- StripePlatformCustomer |> Repo.get(id),
15+
{:ok, :authorized} <- current_user |> Policy.authorize(:show, stripe_platform_customer, params) do
16+
conn |> render("show.json-api", data: stripe_platform_customer)
17+
end
18+
end
1419

15-
def handle_create(_conn, attributes) do
16-
attributes |> StripePlatformCustomerService.create
20+
@spec create(Plug.Conn.t, map) :: Conn.t
21+
def create(%Conn{} = conn, %{} = params) do
22+
with %User{} = current_user <- conn |> Guardian.Plug.current_resource,
23+
{:ok, :authorized} <- current_user |> Policy.authorize(:create, %StripePlatformCustomer{}, params),
24+
{:ok, %StripePlatformCustomer{} = stripe_platform_customer} <- StripePlatformCustomerService.create(params) do
25+
conn |> put_status(:created) |> render("show.json-api", data: stripe_platform_customer)
26+
end
1727
end
1828
end

0 commit comments

Comments
 (0)