Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
117d696
Merge pull request #225 from code-corps/develop
joshsmith Sep 17, 2016
a274816
Merge pull request #229 from code-corps/develop
joshsmith Sep 17, 2016
b29220f
Merge pull request #234 from code-corps/develop
joshsmith Sep 18, 2016
20caea6
Merge pull request #239 from code-corps/develop
joshsmith Sep 18, 2016
9ef4f60
Merge pull request #276 from code-corps/develop
joshsmith Sep 27, 2016
65453c9
Merge pull request #278 from code-corps/develop
joshsmith Sep 27, 2016
f449564
Merge pull request #292 from code-corps/develop
joshsmith Sep 28, 2016
1852e7d
Merge pull request #295 from code-corps/develop
joshsmith Sep 29, 2016
5fc30f7
Merge pull request #296 from code-corps/develop
joshsmith Sep 29, 2016
c359738
Merge pull request #308 from code-corps/develop
joshsmith Oct 3, 2016
a0e63fb
Merge pull request #318 from code-corps/develop
joshsmith Oct 5, 2016
82702ad
Initial commit
begedin Oct 20, 2016
566bf78
Merge pull request #655 from code-corps/develop
joshsmith Jan 21, 2017
1f035de
Merge pull request #657 from code-corps/develop
joshsmith Jan 21, 2017
9f50fe9
Merge pull request #662 from code-corps/develop
joshsmith Jan 25, 2017
3f159a9
Merge pull request #679 from code-corps/develop
joshsmith Feb 1, 2017
34ee692
Merge pull request #681 from code-corps/develop
joshsmith Feb 2, 2017
bc92ca5
Merge pull request #684 from code-corps/develop
joshsmith Feb 4, 2017
fd074f6
Merge pull request #686 from code-corps/develop
joshsmith Feb 5, 2017
7ee4bc3
Merge pull request #691 from code-corps/develop
joshsmith Feb 10, 2017
56ffc7a
Merge pull request #705 from code-corps/develop
joshsmith Feb 21, 2017
f6d3e87
Merge pull request #727 from code-corps/develop
joshsmith Mar 7, 2017
84bc5a2
Merge pull request #747 from code-corps/develop
joshsmith Mar 10, 2017
bd12d27
Merge pull request #760 from code-corps/develop
joshsmith Mar 16, 2017
d79696c
Merge pull request #763 from code-corps/develop
joshsmith Mar 18, 2017
7f2e3e2
Merge pull request #765 from code-corps/develop
joshsmith Mar 18, 2017
68fddd6
Merge pull request #767 from code-corps/develop
joshsmith Mar 18, 2017
f57833d
Merge pull request #771 from code-corps/develop
joshsmith Mar 19, 2017
cbb673f
Merge pull request #777 from code-corps/develop
joshsmith Mar 27, 2017
d54d3f8
Merge pull request #810 from code-corps/develop
joshsmith May 31, 2017
b5081c4
Merge pull request #812 from code-corps/develop
joshsmith May 31, 2017
54fb711
Merge pull request #818 from code-corps/develop
joshsmith Jun 4, 2017
ed5beb8
Merge pull request #870 from code-corps/develop
joshsmith Aug 30, 2017
89316ba
Attempt to fix commit history
crodriguez1a Aug 31, 2017
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions lib/code_corps/policy/category.ex
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
defmodule CodeCorps.Policy.Category do
alias CodeCorps.User

alias CodeCorps.{ User }

@spec create?(User.t) :: boolean
def create?(%User{admin: true}), do: true
def create?(%User{admin: false}), do: false
def create?(%User{}), do: false

@spec update?(User.t) :: boolean
def update?(%User{admin: true}), do: true
def update?(%User{admin: false}), do: false
def update?(%User{}), do: false
end
5 changes: 2 additions & 3 deletions lib/code_corps/policy/policy.ex
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ defmodule CodeCorps.Policy do
end

@spec can?(User.t, atom, struct, map) :: boolean
defp can?(%User{} = user, :create, %Category{}, %{}), do: Policy.Category.create?(user)
defp can?(%User{} = user, :update, %Category{}, %{}), do: Policy.Category.update?(user)
defp can?(%User{} = user, :create, %Comment{}, %{} = params), do: Policy.Comment.create?(user, params)
defp can?(%User{} = user, :update, %Comment{} = comment, %{}), do: Policy.Comment.update?(user, comment)

Expand All @@ -39,9 +41,6 @@ defmodule CodeCorps.Policy do

def can?(%User{} = current_user, :update, %User{} = user), do: Policy.User.update?(user, current_user)

def can?(%User{} = user, :create, Category), do: Policy.Category.create?(user)
def can?(%User{} = user, :update, %Category{}), do: Policy.Category.update?(user)

def can?(%User{} = user, :create, %Changeset{data: %DonationGoal{}} = changeset), do: Policy.DonationGoal.create?(user, changeset)
def can?(%User{} = user, :update, %DonationGoal{} = comment), do: Policy.DonationGoal.update?(user, comment)
def can?(%User{} = user, :delete, %DonationGoal{} = comment), do: Policy.DonationGoal.delete?(user, comment)
Expand Down
44 changes: 35 additions & 9 deletions lib/code_corps_web/controllers/category_controller.ex
Original file line number Diff line number Diff line change
@@ -1,17 +1,43 @@
defmodule CodeCorpsWeb.CategoryController do
use CodeCorpsWeb, :controller
use JaResource

alias CodeCorps.Category
alias CodeCorps.{ Category, User, Helpers.Query}

plug :load_resource, model: Category, only: [:show]
plug :load_and_authorize_resource, model: Category, only: [:create, :update]
plug JaResource
action_fallback CodeCorpsWeb.FallbackController
plug CodeCorpsWeb.Plug.DataToAttributes

@spec model :: module
def model, do: CodeCorps.Category
@spec index(Conn.t, map) :: Conn.t
def index(%Conn{} = conn, %{} = params) do
with categories <- Category |> Query.id_filter(params) |> Repo.all do
conn |> render("index.json-api", data: categories)
end
end

@spec show(Conn.t, map) :: Conn.t
def show(%Conn{} = conn, %{"id" => id}) do
with %Category{} = category <- Category |> Repo.get(id) do
conn |> render("show.json-api", data: category)
end
end

@spec create(Plug.Conn.t, map) :: Conn.t
def create(%Conn{} = conn, %{} = params) do
with %User{} = current_user <- conn |> Guardian.Plug.current_resource,
{:ok, :authorized} <- current_user |> Policy.authorize(:create, %Category{}, params),
{:ok, %Category{} = category} <- %Category{} |> Category.create_changeset(params) |> Repo.insert
do
conn |> put_status(:created) |> render("show.json-api", data: category)
end
end

def handle_create(_conn, attributes) do
Category.create_changeset(%Category{}, attributes)
@spec update(Plug.Conn.t, map) :: Conn.t
def update(%Conn{} = conn, %{"id" => id} = params) do
with %Category{} = category <- Category |> Repo.get(id),
%User{} = current_user <- conn |> Guardian.Plug.current_resource,
{:ok, :authorized} <- current_user |> Policy.authorize(:update, category),
{:ok, %Category{} = category} <- category |> Category.changeset(params) |> Repo.update
do
conn |> render("show.json-api", data: category)
end
end
end

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Textbook quality controller conversion here 👍