限制用户从Elixir和phoenix Web应用程序中的更改集删除用户

问题描述 投票:0回答:1

我们可以根据用户在Repo.delete!(changeset)条件下在elixir和phoenix Web开发中的电子邮件地址来限制从数据库中删除用户的情况

现在是我正在使用的代码。我想在删除期间限制从数据库中删除两个用户:-

def delete(conn, _params, current_admin) do

    changeset = AdminUser.common_changeset(conn.assigns.admin_user, %{}, whodoneit(current_admin))

    Repo.delete!(changeset)

    msg = gettext("%{name} deleted successfully", name: gettext("Administrator"))

    conn
    |> put_flash(:success, msg)
    |> redirect(to: Routes.admin_admin_user_path(conn, :index))

end
elixir delete-row ecto phoenix changeset
1个回答
0
投票

尽管防止对某些“记录记录”执行操作的正确方法是更改​​数据库以拒绝此类修改(请参见下文),但仍然可以使用Ecto.Changeset.validate_change/3及其更详细的同级Ecto.Changeset.validate_change/3来实现此结果。那里的示例显示了如何防止基于值验证某些变更集。

更通用的方法是在委派给默认的Ecto.Changeset.validate_exclusion/4之前,实现Ecto.Changeset.validate_exclusion/4(和Ecto.Repo.delete/2)回调以检查值>

Ecto.Repo.delete/2

它仍然很容易出错,因为可能只是通过Ecto.Repo.delete!/2执行原始查询>

Ecto.Repo.delete!/2

此外,有人可能会修改

电子邮件,在这种情况下,您想避免使用Ecto.Repo.Schema.delete/4

也就是说,唯一正确的方法是依靠数据库拒绝此类删除。可以使用Ecto.Repo.Schema.delete/4或PostgreSQL中的@impl Ecto.Repo def delete(struct, opts \\ []) do # check the record and execute the code below # if and only if the check passed Ecto.Repo.Schema.delete( __MODULE__, get_dynamic_repo(), struct, with_default_options(:delete, opts) ) end 完成。这将是触发示例。

Ecto.Adapters.SQL.query/4
© www.soinside.com 2019 - 2024. All rights reserved.