Packages
sentry
0.2.0
13.3.0
13.2.0
13.1.0
13.0.1
13.0.0
12.0.3
12.0.2
12.0.1
12.0.0
11.0.4
11.0.3
11.0.2
11.0.1
11.0.0
10.10.0
10.9.0
10.8.1
10.8.0
10.7.1
10.7.0
10.6.2
10.6.1
10.6.0
10.5.0
10.4.0
10.3.0
10.2.1
10.2.0
10.2.0-rc.2
10.2.0-rc.1
10.1.0
10.0.3
10.0.2
10.0.1
10.0.0
9.1.0
9.0.0
8.1.0
8.0.6
8.0.5
8.0.4
8.0.3
8.0.2
8.0.1
8.0.0
8.0.0-rc.2
8.0.0-rc.1
8.0.0-rc.0
retired
7.2.5
7.2.4
7.2.3
7.2.2
7.2.1
7.2.0
7.1.0
7.0.6
7.0.5
7.0.4
7.0.3
7.0.2
7.0.1
7.0.0
6.4.2
6.4.1
6.4.0
6.3.0
6.2.1
6.2.0
6.1.0
6.0.5
6.0.4
6.0.3
6.0.2
6.0.1
6.0.0
5.0.1
5.0.0
4.0.3
4.0.2
4.0.1
4.0.0
3.0.0
2.2.0
2.1.0
2.0.2
2.0.1
2.0.0
1.1.2
1.1.1
1.1.0
1.0.0
0.3.2
0.3.1
0.3.0
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
The Official Elixir client for Sentry
Current section
Files
Jump to
Current section
Files
lib/sentry/authorizer.ex
defmodule Sentry.Authorizer do
import Sentry.Helpers, only: [unsuffix: 2, suffix: 2]
def authorize_changeset(conn, changeset, function \\ nil) do
policy = policy_module(changeset.model.__struct__)
function = function || conn.private[:phoenix_action]
apply_policy!(policy, function, [conn, changeset])
end
def authorize_changeset!(conn, changeset, function \\ nil) do
policy = policy_module(changeset.model.__struct__)
function = function || conn.private[:phoenix_action]
apply_policy!(policy, function, [conn, changeset])
end
def authorize(conn, opts \\ nil) do
policy = policy_module(conn.private[:phoenix_controller], "Controller")
function = conn.private[:phoenix_action]
apply_policy(policy, function, [conn, opts])
end
def authorize!(conn, opts \\ nil) do
policy = policy_module(conn.private[:phoenix_controller], "Controller")
function = conn.private[:phoenix_action]
apply_policy(policy, function, [conn, opts])
end
defp apply_policy(module, function, args) do
check_policy!(module)
case apply(module, function, args) do
{:ok, result} -> {:ok, result}
{:error, reason} -> {:error, reason}
_ -> raise Sentry.MatchError, module: module,
function: function,
arity: length(args)
end
end
defp apply_policy!(module, function, args) do
check_policy!(module)
case apply(module, function, args) do
{:ok, result} -> result
{:error, reason} -> raise Sentry.NotAuthorizedError, reason: reason
_ -> raise Sentry.MatchError, module: module,
function: function,
arity: length(args)
end
end
defp check_policy!(policy) do
unless Code.ensure_loaded?(policy) do
raise Sentry.UndefinedPolicyError, policy: policy
end
end
defp policy_module(module, suffix \\ "") do
module_parts = module |> Module.split
policy = module_parts
|> List.last
|> unsuffix(suffix)
|> suffix("Policy")
module_parts
|> List.replace_at(length(module_parts) - 1, policy)
|> Module.concat
end
end