-
-
Notifications
You must be signed in to change notification settings - Fork 9
Description
Is your feature request related to a problem? Please describe.
I see in the documentation that is stated as one of the main reasons one would not consider using LetMe the inability to provide more detailed information on why an authorization request failed:
You need to provide details on why an authorization request fails. Checks in LetMe currently return only a boolean value, meaning users receive a generic error without knowing which exact check failed. (Source)
I'm sure this is intentional, but I don't fully comprehend why the library present this design choice; Wouldn't the ability to return a {:error, reason} tuple instead of simply false be a sensible choice in order to provide more flexibility for end users?
My issue arises from the fact that I can't easily point why an authorization request failed - If I have a policy like:
object :object1 do
action :create do
allow [:requirement1, :requirement2, :requirement3, ...]
end
endIt would be useful to have transparency on which exact check failed, but currently I'm only able to get {:error, :unauthorized}.
Describe the solution you'd like
It would be great if I could specify the reason for a failed test in the check itself.
For example something like:
defmodule MyApp.Policy.Checks do
def requirement1(%User{id: id}, %{user_id: id}), do: true
def requirement1(_subject, _object), do: {:error, :unsatisfied_requirement1}
def requirement2(%Something{}, _), do: true
def requirement2(subject, object), do: {:error, :unsatisfied_requirement2}
endDescribe alternatives you've considered
From what I could see, Bodyguard does have the ability to specify a custom error/reason - Which is great, but after seen how nicely LetMe handles things, I would really prefer sticking with it if possible.
Additional context
I know that the design choice for this behavior was deliberate, but I can't understand exactly why...
@woylie , would you be able to clarify the reasons for such an option?
Also, I'd like to say that the work done in LetMe is great, and I'm thankful for all your efforts and providing the Elixir ecosystem a great library! πββοΈ