🛡 Terminator 🛡
Terminator is toolkit for granular ability management for performers
WIP: NOT INTENDED FOR PRODUCTION USE
Installation
def deps do
[
{:terminator, "~> 0.1.5"}
]
end
# In your config/config.exs file
config :terminator, Terminator.Repo,
username: "postgres",
password: "postgres",
database: "terminator_dev",
hostname: "localhost"
Granting abilities
Let's assume we want to create new Role
- admin which is able to delete accounts inside our system. We want to have special Performer
who is given this role but also he is able to have Ability
for banning users.
- Create performer
iex> {:ok, performer} = %Terminator.Performer{} |> Terminator.Repo.insert()
- Create some abilities
iex> {:ok, ability_delete} = Terminator.Ability.build("delete_accounts", "Delete accounts of users") |> Terminator.Repo.insert()
iex> {:ok, ability_ban} = Terminator.Ability.build("ban_accounts", "Ban users") |> Terminator.Repo.insert()
- Create role
iex> {:ok, role} = Terminator.Role.build("admin", [], "Site administrator") |> Terminator.Repo.insert()
- Grant abilities to a role
iex> Terminator.Role.grant(role, ability_delete)
- Grant role to a performer
iex> Terminator.Performer.grant(performer, role)
- Grant abilities to a performer
iex> Terminator.Performer.grant(performer, ability_ban)
iex> performer |> Terminator.Repo.preload([:roles, :abilities])
%Terminator.Performer{
abilities: [
%Terminator.Ability{
identifier: "ban_accounts"
}
]
roles: [
%Terminator.Role{
identifier: "admin"
abilities: ["delete_accounts"]
}
]
}
Revoking abilities
Same as we can grant any abilities to models we can also revoke them.
iex> Terminator.Performer.revoke(performer, role)
iex> performer |> Terminator.Repo.preload([:roles, :abilities])
%Terminator.Performer{
abilities: [
%Terminator.Ability{
identifier: "ban_accounts"
}
]
roles: []
}
iex> Terminator.Performer.revoke(performer, ability_ban)
iex> performer |> Terminator.Repo.preload([:roles, :abilities])
%Terminator.Performer{
abilities: []
roles: []
}