hassox / phoenix_guardian

A demo application showing usage of guardian and ueberauth
MIT License
300 stars 70 forks source link

Current Auth Status Inflexible #29

Open Lazarus404 opened 8 years ago

Lazarus404 commented 8 years ago

So, I'm finding this is getting more and more problematic as time goes on. Currently, if I want to use the permissions of a user, I have to create a parser for each user type. Consider the following:

  def load(conn, params, current_user, {:ok, %{"pem" => %{"sys" => perms}}} = claims) do
    do_load(conn, params, current_user, perms)
  end
  def load(conn, params, current_user, {:ok, %{"pem" => %{"admin" => perms}}} = claims) do
    do_load(conn, params, current_user, perms)
  end
  def load(conn, params, current_user, {:ok, %{"pem" => %{"user" => perms}}} = claims) do
    do_load(conn, params, current_user, perms)
  end

Here, I have to create all three function signatures, because it's not possible to do:

  def load(conn, params, current_user, {:ok, %{"pem" => %{type => perms}}} = claims) when type in ["sys", "admin", "user"] do

Any thoughts on an efficient way to do this?

Thanks

hassox commented 8 years ago

I'm not clear what you're trying to do exactly.