Skip to content

Commit 2cb10dd

Browse files
landongrindheimbegedin
authored andcommitted
Remove JaResource/Canary from StripePlatformCardController (#1021)
1 parent b1adc19 commit 2cb10dd

4 files changed

Lines changed: 34 additions & 42 deletions

File tree

lib/code_corps/policy/policy.ex

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ defmodule CodeCorps.Policy do
5555
defp can?(%User{} = current_user, :create, %StripeConnectPlan{}, %{} = params),
5656
do: Policy.StripeConnectPlan.create?(current_user, params)
5757
defp can?(%User{} = current_user, :create, %Skill{}, %{}), do: Policy.Skill.create?(current_user)
58+
defp can?(%User{} = current_user, :show, %StripePlatformCard{} = stripe_platform_card, %{}),
59+
do: Policy.StripePlatformCard.show?(current_user, stripe_platform_card)
60+
defp can?(%User{} = current_user, :create, %StripePlatformCard{}, %{} = params),
61+
do: Policy.StripePlatformCard.create?(current_user, params)
5862
defp can?(%User{} = current_user, :create, %TaskSkill{}, %{} = params), do: Policy.TaskSkill.create?(current_user, params)
5963
defp can?(%User{} = current_user, :delete, %TaskSkill{} = task_skill, %{}), do: Policy.TaskSkill.delete?(current_user, task_skill)
6064
defp can?(%User{} = current_user, :create, %UserCategory{} = user_category, %{}), do: Policy.UserCategory.create?(current_user, user_category)
@@ -101,10 +105,6 @@ defmodule CodeCorps.Policy do
101105
def can?(%User{} = user, :show, %StripeConnectSubscription{} = stripe_connect_subscription), do: Policy.StripeConnectSubscription.show?(user, stripe_connect_subscription)
102106
def can?(%User{} = user, :create, %Changeset{ data: %StripeConnectSubscription{}} = changeset), do: Policy.StripeConnectSubscription.create?(user, changeset)
103107

104-
def can?(%User{} = user, :show, %StripePlatformCard{} = stripe_platform_card), do: Policy.StripePlatformCard.show?(user, stripe_platform_card)
105-
def can?(%User{} = user, :create, %Changeset{ data: %StripePlatformCard{}} = changeset), do: Policy.StripePlatformCard.create?(user, changeset)
106-
def can?(%User{} = user, :delete, %StripePlatformCard{} = stripe_platform_card), do: Policy.StripePlatformCard.delete?(user, stripe_platform_card)
107-
108108
def can?(%User{} = user, :create, %Changeset{data: %StripePlatformCustomer{}} = changeset), do: Policy.StripePlatformCustomer.create?(user, changeset)
109109
def can?(%User{} = user, :show, %StripePlatformCustomer{} = stripe_platform_customer), do: Policy.StripePlatformCustomer.show?(user, stripe_platform_customer)
110110

lib/code_corps/policy/stripe_platform_card.ex

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
defmodule CodeCorps.Policy.StripePlatformCard do
22
alias CodeCorps.StripePlatformCard
33
alias CodeCorps.User
4-
alias Ecto.Changeset
54

6-
def create?(user, card), do: user |> owns?(card)
7-
def delete?(user, changeset), do: user |> owns?(changeset)
5+
@spec create?(User.t, map) :: boolean
6+
def create?(user, params), do: user |> owns?(params)
7+
8+
@spec show?(User.t, StripePlatformCard.t) :: boolean
89
def show?(user, card), do: user |> owns?(card)
910

10-
defp owns?(%User{id: current_user_id}, %Changeset{changes: %{user_id: user_id}}) do
11+
@spec owns?(User.t, StripePlatformCard.t | map) :: boolean
12+
defp owns?(%User{id: current_user_id}, %StripePlatformCard{user_id: user_id}) do
1113
current_user_id == user_id
1214
end
1315

14-
defp owns?(%User{id: current_user_id}, %StripePlatformCard{user_id: user_id}) do
16+
defp owns?(%User{id: current_user_id}, %{"user_id" => user_id}) do
1517
current_user_id == user_id
1618
end
1719

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,28 @@
11
defmodule CodeCorpsWeb.StripePlatformCardController do
22
use CodeCorpsWeb, :controller
3-
use JaResource
43

5-
alias CodeCorps.StripePlatformCard
64
alias CodeCorps.StripeService.StripePlatformCardService
5+
alias CodeCorps.{StripePlatformCard, User}
76

8-
plug :load_and_authorize_resource, model: StripePlatformCard, only: [:show], preload: [:user]
9-
plug :load_and_authorize_changeset, model: StripePlatformCard, only: [:create]
7+
action_fallback CodeCorpsWeb.FallbackController
8+
plug CodeCorpsWeb.Plug.DataToAttributes
9+
plug CodeCorpsWeb.Plug.IdsToIntegers
1010

11-
plug JaResource
12-
13-
@spec model :: module
14-
def model, do: CodeCorps.StripePlatformCard
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+
%StripePlatformCard{} = stripe_platform_card <- StripePlatformCard |> Repo.get(id),
15+
{:ok, :authorized} <- current_user |> Policy.authorize(:show, stripe_platform_card, params) do
16+
conn |> render("show.json-api", data: stripe_platform_card)
17+
end
18+
end
1519

16-
def handle_create(_conn, attributes) do
17-
attributes |> StripePlatformCardService.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, %StripePlatformCard{}, params),
24+
{:ok, %StripePlatformCard{} = stripe_platform_card} <- StripePlatformCardService.create(params) do
25+
conn |> put_status(:created) |> render("show.json-api", data: stripe_platform_card)
26+
end
1827
end
1928
end

test/lib/code_corps/policy/stripe_platform_card_test.exs

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,21 @@
11
defmodule CodeCorps.Policy.StripePlatformCardTest do
22
use CodeCorps.PolicyCase
33

4-
import CodeCorps.Policy.StripePlatformCard, only: [create?: 2, delete?: 2, show?: 2]
5-
import CodeCorps.StripePlatformCard, only: [create_changeset: 2]
6-
7-
alias CodeCorps.StripePlatformCard
4+
import CodeCorps.Policy.StripePlatformCard, only: [create?: 2, show?: 2]
85

96
describe "create?" do
107
test "returns true if user is creating their own record" do
118
user = insert(:user)
12-
changeset = %StripePlatformCard{} |> create_changeset(%{user_id: user.id})
9+
stripe_platform_card = insert(:stripe_platform_card, user: user)
1310

14-
assert create?(user, changeset)
11+
assert create?(user, stripe_platform_card)
1512
end
1613

1714
test "returns false if user is creating someone else's record" do
1815
user = build(:user)
19-
changeset = %StripePlatformCard{} |> create_changeset(%{user_id: "someone-else"})
20-
21-
refute create?(user, changeset)
22-
end
23-
end
24-
25-
describe "delete?" do
26-
test "returns true if user is deleting their own record" do
27-
user = insert(:user)
28-
stripe_platform_card = insert(:stripe_platform_card, user: user)
29-
30-
assert delete?(user, stripe_platform_card)
31-
end
32-
33-
test "returns false if user is deleting someone else's record" do
34-
user = insert(:user)
3516
stripe_platform_card = insert(:stripe_platform_card)
3617

37-
refute delete?(user, stripe_platform_card)
18+
refute create?(user, stripe_platform_card)
3819
end
3920
end
4021

0 commit comments

Comments
 (0)