Как сделать контроллеры / маршруты доступными с определенными разрешениями с помощью Phoenix Guardian
Я пытаюсь реализовать веб-приложение с конкретными функциями, которые должны быть защищены ролями безопасности. У меня есть рабочая аутентификация, но я не могу получить разрешения на работу. Я попытался после этого, Как вы ограничиваете разрешения для определенного действия с хранителем и фениксом, но это не дает полный пример.
У меня есть следующая реализация 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?
не содержит никакой пользовательской информации о пользователе.
Я не знаю, как сшить все это вместе.