Packages
guardian
2.4.0
2.4.0
2.3.2
2.3.1
2.3.0
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.2
2.1.1
2.0.0
1.2.1
1.2.0
retired
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-beta.1
1.0.0-beta.0
0.14.6
0.14.5
0.14.4
0.14.3
retired
0.14.2
0.14.1
0.14.0
0.13.0
0.12.0
0.11.1
0.10.1
0.10.0
0.9.1
0.9.0
0.8.1
0.8.0
0.7.4
0.7.2
0.7.1
0.7.0
0.6.3
0.6.2
0.6.1
0.6.0
0.5.2
0.5.0
0.4.1
0.4.0
0.3.1
0.3.0
0.2.0
0.1.1
0.1.0
Elixir Authentication framework
Current section
Files
Jump to
Current section
Files
lib/guardian/permissions/text_encoding.ex
defmodule Guardian.Permissions.TextEncoding do
@moduledoc """
Text encoding for permissions.
"""
@behaviour Guardian.Permissions.PermissionEncoding
import Bitwise
def encode(value, type, perm_set) when is_integer(value) do
perms = Map.get(perm_set, type)
for {k, v} <- perms, band(value, v) == v, into: [] do
to_string(k)
end
end
def encode(value, type, perm_set) when is_list(value) do
perms = Map.get(perm_set, type)
Enum.reduce(value, [], &encode_value(&1, perms, &2))
end
defp encode_value(value, _perm_set, acc) when is_atom(value),
do: [Atom.to_string(value) | acc]
defp encode_value(value, _perm_set, acc) when is_binary(value),
do: [value | acc]
def decode(value, _type, _perm_set) when is_list(value) do
Enum.map(value, &String.to_atom/1)
end
def decode(value, _type, _perm_set) do
value
end
end