0

我想要一个表单视图,可以根据情况以防弹方式禁用提交功能,这样即使是聪明的用户也无法编辑 HTML 源(通过浏览器扩展)以重新添加提交按钮。

似乎这样做的一种方法可能是以某种方式注入一个无效的真实性令牌来替换(有效的)rails生成的一个,这样即使用户以某种方式重新添加了提交按钮(通过浏览器扩展编辑HTML)它仍然是无效的提交。

我的想法是在视图中有一些逻辑:

- if @form_disabled   # set by controller
  - somehow_invalidate_the_authenticity_token?

如何“破坏” Rails 表单提交?

这样做的目的不是在 :show 动作中呈现预览,而是让完全相同的视图同时显示实时表单和死表单。

4

2 回答 2

0

在阅读了我的另一个答案后,我开始认为您可以像 Pundit 在控制器上做的一样:

def update
  if <unauthorized user>
    flash[:alert] = "You are not authorized to perform this action."
    redirect_to(request.referrer || root_path)
  else
    # all the update stuff
    # ...
  end
end
于 2015-10-02T03:15:12.867 回答
0

如果我是你,我会使用pundit

它非常简单,如果您需要知道它是如何工作的,只需几行代码。

我会开始在这里编写代码,但我意识到自述文件中的示例符合您的需求。

在应用程序控制器添加这个

app/policies当然,在放置类PostPolicy的文件夹中,您必须将“Post”替换为单数的控制器名称(即使您没有具有该名称的模型)。( update?and create?) 动作应该返回true/false以指示用户是否被允许。

在自述文件的几行之后,您会找到更新前的记录PostsController#update调用的操作。authorize我认为你想对 create 做同样的事情(那么你需要一个create?策略类的方法)。

Pundit 需要current_user控制器方法,如果你没有的话。只需按照用户自定义说明进行操作。

当然,new动作edit不会调用authorize,因为每个人都可以这样做。只有POST& 的PUT/PATCH动作是被禁止的。

是的,这不仅仅是对一行代码的手术。但这是向用户授予访问权限的简单且正确的方法。

于 2015-10-02T02:50:41.243 回答