如何使用Phoenix Guardian通过特定权限访问控制器/路由

时间:2018-09-27 20:56:08

标签: elixir phoenix-framework guardian

我正在尝试使用必须由安全角色保护的特定功能来实现Web应用程序。我具有有效的身份验证,但无法获得权限。我尝试遵循How do you restrict permissions to a specific action with guardian and phoenix,但是它没有提供完整的示例。

我有以下Guardian实现。

defmodule FireballApp.Guardian do
  use Guardian, otp_app: :fireball_app

  alias FireballApp.Accounts

  def subject_for_token(user, _claims) do
    {:ok, to_string(user.id)}
  end

  def subject_for_token(_, _) do
    {:error, :reason_for_error}
  end

  def resource_from_claims(%{"sub" => id}) do
    case Accounts.get_user!(id) do
      d when is_nil(d) ->  {:error, :resource_not_found}
      user -> {:ok, user}
    end
  end

  def decode_permissions_from_claims(claims) do
    nil
  end

  def all_permissions?(status, roles) do
    nil
  end
end

我将此插头线放在我的一个安全控制器的开头。

plug Guardian.Permissions.Bitwise, ensure: %{admin: [:lookups_edit]}

此行调用我的Guardian实现,但我不知道如何填写。 Decode_permissions_from_claims包含用户信息,但不知道要检查哪些角色。但是all_permissions?不包含有关该用户的任何用户信息。

我不知道如何将所有这些缝合在一起。

0 个答案:

没有答案