Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
限制用户从Elixir和phoenix web应用程序的变更集中删除_Elixir_Delete Row_Ecto_Phoenix_Changeset - Fatal编程技术网

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

限制用户从Elixir和phoenix web应用程序的变更集中删除,elixir,delete-row,ecto,phoenix,changeset,Elixir,Delete Row,Ecto,Phoenix,Changeset,我们是否可以根据用户在Repo.delete中的电子邮件地址限制其从数据库中删除!(变更集)elixir和phoenix web开发中的条件 这就是我现在使用的代码。我想在删除过程中限制从数据库中删除两个用户:- def delete(连接、参数、当前管理员)do changeset=AdminUser.common_变更集(conn.assigns.admin_user,%{},whodoneit(当前_admin)) 删除!(变更集) msg=gettext(“%{name}已成功删除”,名

我们是否可以根据用户在Repo.delete中的电子邮件地址限制其从数据库中删除!(变更集)elixir和phoenix web开发中的条件


这就是我现在使用的代码。我想在删除过程中限制从数据库中删除两个用户:-

def delete(连接、参数、当前管理员)do
changeset=AdminUser.common_变更集(conn.assigns.admin_user,%{},whodoneit(当前_admin))
删除!(变更集)
msg=gettext(“%{name}已成功删除”,名称:gettext(“管理员”))
康涅狄格州
|>put_flash(:success,msg)
|>重定向(到:Routes.admin\u admin\u user\u路径(conn,:index))
结束

尽管防止对某些“粘贴记录”执行操作的正确方法是更改数据库以拒绝此类修改(请参见下文),但仍然可以通过,及其更为固定的兄弟来实现此结果。该示例显示了如何防止基于值验证某些变更集

更一般的方法是实现(和)回调以在委托给默认值之前检查值

@impl-exto.Repo
def delete(结构,选项\\[])do
#检查记录并执行下面的代码
#当且仅当支票通过时
exto.Repo.Schema.delete(
__模块,
get_dynamic_repo(),
结构,
使用默认选项(:删除,选择)
)
结束
它仍然非常容易出错,因为可能只是通过

exto.Adapters.SQL.query(MyRepo,“从用户删除,其中email=,[admin_email]”)
此外,您可能会修改电子邮件,在这种情况下,您可能希望防止
UPDATE


也就是说,唯一正确的方法是依靠DB拒绝此类删除。可以使用PostgreSQL中的
触发器
,或
规则
完成。下面是触发器示例

CREATE或REPLACE函数prevent\u email\u hacks()
将“触发器”返回为
'
开始
如果OLD.email=”admin@foo.bar”“那么
引发异常“此电子邮件已锁定”;
如果结束;
归还新的;
结束;
'
语言“plpgsql”易失性;
创建触发器保护\u管理
在插入、更新或删除之前
关于用户
每行
执行程序防止电子邮件攻击();

尽管防止对某些“粘贴记录”执行操作的正确方法是更改数据库以拒绝此类修改(请参见下文),但仍然可以通过,及其更为固定的兄弟来实现此结果。该示例显示了如何防止基于值验证某些变更集

更一般的方法是实现(和)回调以在委托给默认值之前检查值

@impl-exto.Repo
def delete(结构,选项\\[])do
#检查记录并执行下面的代码
#当且仅当支票通过时
exto.Repo.Schema.delete(
__模块,
get_dynamic_repo(),
结构,
使用默认选项(:删除,选择)
)
结束
它仍然非常容易出错,因为可能只是通过

exto.Adapters.SQL.query(MyRepo,“从用户删除,其中email=,[admin_email]”)
此外,您可能会修改电子邮件,在这种情况下,您可能希望防止
UPDATE


也就是说,唯一正确的方法是依靠DB拒绝此类删除。可以使用PostgreSQL中的
触发器
,或
规则
完成。下面是触发器示例

CREATE或REPLACE函数prevent\u email\u hacks()
将“触发器”返回为
'
开始
如果OLD.email=”admin@foo.bar”“那么
引发异常“此电子邮件已锁定”;
如果结束;
归还新的;
结束;
'
语言“plpgsql”易失性;
创建触发器保护\u管理
在插入、更新或删除之前
关于用户
每行
执行程序防止电子邮件攻击();

正确的方法是使用DB trigger。嗨,Aleksei…如果您可以发布任何示例来完成此任务,我将非常高兴…谢谢。我想限制删除具有电子邮件ID的用户,例如'test1@gmail.com“还有”test2@gmail.com'. 但我不知道如何在变更集中使用此功能。正确的方法是使用DB触发器。嗨,Aleksei…如果您可以发布任何示例来完成此任务,我将非常高兴…谢谢。我想限制删除具有电子邮件ID的用户,例如'test1@gmail.com“还有”test2@gmail.com'. 但我不知道如何在变更集中使用它。祝贺100k:-)@AdamMillerchip谢谢,这不是我真正感到自豪的,但它仍然像“嘿,伙计,你帮了我10万次。”祝贺100k:-)@AdamMillerchip谢谢,这不是我真正感到自豪的,但仍然像是“嘿,伙计,你帮了我10万次。”