Skip to content

Commit 211ceca

Browse files
committed
Clean up Policy.User, change order of arguments
1 parent 5626650 commit 211ceca

3 files changed

Lines changed: 22 additions & 14 deletions

File tree

lib/code_corps/policy/policy.ex

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,16 @@ defmodule CodeCorps.Policy do
2424
end
2525

2626
@spec can?(User.t, atom, struct, map) :: boolean
27-
defp can?(%User{} = user, :create, %Category{}, %{}), do: Policy.Category.create?(user)
28-
defp can?(%User{} = user, :update, %Category{}, %{}), do: Policy.Category.update?(user)
29-
defp can?(%User{} = user, :create, %Comment{}, %{} = params), do: Policy.Comment.create?(user, params)
30-
defp can?(%User{} = user, :update, %Comment{} = comment, %{}), do: Policy.Comment.update?(user, comment)
31-
defp can?(%User{} = user, :create, %Organization{}, %{}), do: Policy.Organization.create?(user)
32-
defp can?(%User{} = user, :update, %Organization{} = organization, %{}), do: Policy.Organization.update?(user, organization)
33-
defp can?(%User{} = current_user, :update, %User{} = user, %{}), do: Policy.User.update?(user, current_user)
34-
defp can?(%User{} = user, :create, %UserTask{}, %{} = params), do: Policy.UserTask.create?(user, params)
35-
defp can?(%User{} = user, :update, %UserTask{} = user_task, %{}), do: Policy.UserTask.update?(user, user_task)
36-
defp can?(%User{} = user, :delete, %UserTask{} = user_task, %{}), do: Policy.UserTask.delete?(user, user_task)
27+
defp can?(%User{} = current_user, :create, %Category{}, %{}), do: Policy.Category.create?(current_user)
28+
defp can?(%User{} = current_user, :update, %Category{}, %{}), do: Policy.Category.update?(current_user)
29+
defp can?(%User{} = current_user, :create, %Comment{}, %{} = params), do: Policy.Comment.create?(current_user, params)
30+
defp can?(%User{} = current_user, :update, %Comment{} = comment, %{}), do: Policy.Comment.update?(current_user, comment)
31+
defp can?(%User{} = current_user, :create, %Organization{}, %{}), do: Policy.Organization.create?(current_user)
32+
defp can?(%User{} = current_user, :update, %Organization{} = organization, %{}), do: Policy.Organization.update?(current_user, organization)
33+
defp can?(%User{} = current_user, :update, %User{} = user, %{}), do: Policy.User.update?(current_user, user)
34+
defp can?(%User{} = current_user, :create, %UserTask{}, %{} = params), do: Policy.UserTask.create?(current_user, params)
35+
defp can?(%User{} = current_user, :update, %UserTask{} = user_task, %{}), do: Policy.UserTask.update?(current_user, user_task)
36+
defp can?(%User{} = current_user, :delete, %UserTask{} = user_task, %{}), do: Policy.UserTask.delete?(current_user, user_task)
3737

3838
defimpl Canada.Can, for: User do
3939
# NOTE: Canary sets an :unauthorized and a :not_found handler on a config level
@@ -43,7 +43,7 @@ defmodule CodeCorps.Policy do
4343
# will never do anything
4444
#
4545
# The only solution is to have a catch_all match for the resource being nil, which returns true
46-
46+
4747
# NOTE: other tests are using the User policy for the time being.
4848
def can?(%User{}, _action, nil), do: true
4949

lib/code_corps/policy/user.ex

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
defmodule CodeCorps.Policy.User do
2+
@moduledoc ~S"""
3+
Contains authorization policies for performing actions on a `User` record.
4+
5+
Used to authorize controller actions.
6+
"""
27
alias CodeCorps.User
38

4-
def update?(%User{} = user, %User{} = current_user), do: user.id == current_user.id
9+
@spec update?(User.t, User.t) :: boolean
10+
def update?(%User{id: current_user_id}, %User{id: user_id})
11+
when current_user_id == user_id, do: true
12+
def update?(%User{}, %User{}), do: false
513
end

test/lib/code_corps/policy/user_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@ defmodule CodeCorps.Policy.UserTest do
66
describe "update?" do
77
test "returns true if user is updating their own record" do
88
user = insert(:user)
9-
assert update?(user, user)
9+
assert update?(user, user)
1010
end
1111

1212
test "returns false if user is updating someone else's record" do
1313
[user, another_user] = insert_pair(:user)
14-
refute update?(another_user, user)
14+
refute update?(user, another_user)
1515
end
1616
end
1717
end

0 commit comments

Comments
 (0)