Packages
ami
0.1.7
0.3.9
0.3.8
retired
0.3.7
retired
0.3.6
retired
0.3.5
retired
0.3.4
retired
0.3.3
retired
0.3.2
retired
0.3.1
retired
0.3.0
retired
0.2.9
retired
0.2.8
retired
0.2.7
retired
0.2.6
retired
0.2.5
retired
0.2.3
retired
0.2.2
retired
0.2.1
retired
0.2.0
retired
0.1.9
retired
0.1.8
retired
0.1.7
retired
0.1.6
retired
0.1.5
retired
0.1.4
retired
Package containing all AMI Models shared between micro-services.
Retired package: Security issue - retiring
Current section
Files
Jump to
Current section
Files
lib/ami/role.ex
defmodule Ami.Role do
use Bitwise
def roles do
[
:admin,
:instructor,
:community_moderator,
:course_admin,
:learning_facilitator,
:buddy,
:accountibility_partner,
:respondent,
:system_admin
]
end
def roles_from_mask(mask) do
Enum.reject(roles(), fn role ->
(mask &&& :math.pow(2, Enum.find_index(roles(), fn r -> r == role end)) |> round) == 0
end)
end
def has_role?(user_struct, role) do
if user_struct.roles_mask != nil do
roles_from_mask(user_struct.roles_mask)
|> Enum.any?(fn r -> r == role end)
else
false
end
end
def has_any_role?(user_struct, roles) do
grants = MapSet.new(roles)
if user_struct.roles_mask != nil do
user_roles =
__MODULE__.roles_from_mask(user_struct.roles_mask)
|> Enum.into(MapSet.new())
MapSet.intersection(grants, user_roles) |> MapSet.size() > 0
else
false
end
end
def has_all_roles?(user_struct, roles) do
grants = MapSet.new(roles)
if user_struct.roles_mask != nil do
user_roles =
__MODULE__.roles_from_mask(user_struct.roles_mask)
|> Enum.into(MapSet.new())
MapSet.intersection(grants, user_roles)
|> MapSet.size() == MapSet.size(grants)
else
false
end
end
end