diff --git a/elixir/apps/domain/lib/domain/policies.ex b/elixir/apps/domain/lib/domain/policies.ex index 2f3608539..4a99c073d 100644 --- a/elixir/apps/domain/lib/domain/policies.ex +++ b/elixir/apps/domain/lib/domain/policies.ex @@ -80,6 +80,10 @@ defmodule Domain.Policies do end end + def new_policy(attrs, %Auth.Subject{} = subject) do + Policy.Changeset.create(attrs, subject) + end + def ensure_has_access_to(%Auth.Subject{} = subject, %Policy{} = policy) do if subject.account.id == policy.account_id do :ok diff --git a/elixir/apps/domain/priv/repo/migrations/20230825174719_update_policy_indexes.exs b/elixir/apps/domain/priv/repo/migrations/20230825174719_update_policy_indexes.exs new file mode 100644 index 000000000..6ca87acdf --- /dev/null +++ b/elixir/apps/domain/priv/repo/migrations/20230825174719_update_policy_indexes.exs @@ -0,0 +1,17 @@ +defmodule Domain.Repo.Migrations.UpdatePolicyIndexes do + use Ecto.Migration + + def change do + drop(index(:policies, [:account_id, :name], unique: true)) + drop(index(:policies, [:account_id, :resource_id, :actor_group_id], unique: true)) + + create(index(:policies, [:account_id, :name], unique: true, where: "deleted_at IS NULL")) + + create( + index(:policies, [:account_id, :resource_id, :actor_group_id], + unique: true, + where: "deleted_at IS NULL" + ) + ) + end +end diff --git a/elixir/apps/domain/test/support/fixtures/accounts.ex b/elixir/apps/domain/test/support/fixtures/accounts.ex index 7231d1070..a3b8a4c09 100644 --- a/elixir/apps/domain/test/support/fixtures/accounts.ex +++ b/elixir/apps/domain/test/support/fixtures/accounts.ex @@ -3,8 +3,11 @@ defmodule Domain.Fixtures.Accounts do alias Domain.Accounts def account_attrs(attrs \\ %{}) do + unique_num = unique_integer() + Enum.into(attrs, %{ - name: "acc-#{unique_integer()}" + name: "acc-#{unique_num}", + slug: "acc_#{unique_num}" }) end diff --git a/elixir/apps/domain/test/support/fixtures/policies.ex b/elixir/apps/domain/test/support/fixtures/policies.ex index e24576985..2998f9e44 100644 --- a/elixir/apps/domain/test/support/fixtures/policies.ex +++ b/elixir/apps/domain/test/support/fixtures/policies.ex @@ -1,5 +1,6 @@ defmodule Domain.Fixtures.Policies do use Domain.Fixture + alias Domain.Policies def policy_attrs(attrs \\ %{}) do Enum.into(attrs, %{ @@ -42,4 +43,17 @@ defmodule Domain.Fixtures.Policies do policy end + + def delete_policy(policy) do + policy = Repo.preload(policy, :account) + + subject = + Fixtures.Auth.create_subject( + account: policy.account, + actor: [type: :account_admin_user] + ) + + {:ok, policy} = Policies.delete_policy(policy, subject) + policy + end end diff --git a/elixir/apps/web/lib/web/components/form_components.ex b/elixir/apps/web/lib/web/components/form_components.ex index 66a6eb104..7f673edcb 100644 --- a/elixir/apps/web/lib/web/components/form_components.ex +++ b/elixir/apps/web/lib/web/components/form_components.ex @@ -365,11 +365,12 @@ defmodule Web.FormComponents do def delete_button(assigns) do ~H""" -