Add Role helper function and create_role_with_system_flag action
- Add get_mitglied_role/0 helper to avoid code duplication - Add create_role_with_system_flag action for seeds/migrations - Allows setting is_system_role flag (required for 'Mitglied' role)
This commit is contained in:
parent
c7e0181e02
commit
403eda3908
1 changed files with 34 additions and 0 deletions
|
|
@ -67,6 +67,11 @@ defmodule Mv.Authorization.Role do
|
||||||
# Custom validations will still work
|
# Custom validations will still work
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create :create_role_with_system_flag do
|
||||||
|
description "Internal action to create roles, allowing `is_system_role` to be set. Used by seeds and migrations."
|
||||||
|
accept [:name, :description, :permission_set_name, :is_system_role]
|
||||||
|
end
|
||||||
|
|
||||||
update :update_role do
|
update :update_role do
|
||||||
primary? true
|
primary? true
|
||||||
# is_system_role is intentionally excluded - should only be set via seeds/internal actions
|
# is_system_role is intentionally excluded - should only be set via seeds/internal actions
|
||||||
|
|
@ -139,4 +144,33 @@ defmodule Mv.Authorization.Role do
|
||||||
identities do
|
identities do
|
||||||
identity :unique_name, [:name]
|
identity :unique_name, [:name]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Loads the "Mitglied" role without authorization (for bootstrap operations).
|
||||||
|
|
||||||
|
This is a helper function to avoid code duplication when loading the default
|
||||||
|
role in changes, migrations, and test setup.
|
||||||
|
|
||||||
|
## Returns
|
||||||
|
|
||||||
|
- `{:ok, %Mv.Authorization.Role{}}` - The "Mitglied" role
|
||||||
|
- `{:ok, nil}` - Role doesn't exist
|
||||||
|
- `{:error, term()}` - Error during lookup
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
{:ok, mitglied_role} = Mv.Authorization.Role.get_mitglied_role()
|
||||||
|
# => {:ok, %Mv.Authorization.Role{name: "Mitglied", ...}}
|
||||||
|
|
||||||
|
{:ok, nil} = Mv.Authorization.Role.get_mitglied_role()
|
||||||
|
# => Role doesn't exist (e.g., in test environment before seeds run)
|
||||||
|
"""
|
||||||
|
@spec get_mitglied_role() :: {:ok, t() | nil} | {:error, term()}
|
||||||
|
def get_mitglied_role do
|
||||||
|
require Ash.Query
|
||||||
|
|
||||||
|
__MODULE__
|
||||||
|
|> Ash.Query.filter(name == "Mitglied")
|
||||||
|
|> Ash.read_one(authorize?: false, domain: Mv.Authorization)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue