2

我在控制器中编写了两个动作some_controller,允许人们下载文件。程序是这样的:

  1. 用户转到some_controller/export_data并单击表单以生成文本文件。
  2. 然后该操作export_data()为用户写入一个文本文件。
  3. 一旦检测到文件已生成,则会出现另一个按钮供用户单击以通过媒体视图下载文件。这个动作是some_controller/download_file

我的问题是,如何some_controller/download_file手动使用户无法访问?即我想阻止用户在浏览器中输入这个 URL 并下载文件。我尝试设置protected function _download_file(),但这使得视图无法访问中的操作some_controller

我觉得我正在以错误的方式接近这个。有人想给我一些指示吗?

4

2 回答 2

2

当用户单击generate a text file按钮时:

  1. some_controller/export_data行动中设置会话变量

  2. some_controller/download_file行动中首先检查该会话变量。

  3. 如果已设置,则允许用户下载文件并销毁会话。

  4. 如果不是,那么现在让他下载文件。

这样,您可以分配some_controller/download_file public访问权限。

如果用户直接访问some_controller/download_file action,则会话变量将不存在并且他无法下载文件。

于 2013-02-09T07:03:03.617 回答
1

无法保护该操作,因为当用户单击下载按钮时您需要它。你能做的最好的就是保护它,这是完全可以接受的。例如,您可以执行以下操作:

  1. 在 export_data 中生成代表文件的随机密钥(即 1234)
  2. 当按钮出现时,url 包含代表文件的键(即 ../some_controller/download_file?key=1234)
  3. 在 download_file 中,检查 key 是否存在并且代表一个可以下载的文件。如果密钥是好的,给他们文件,如果它没有显示错误消息。
于 2013-02-09T15:34:49.537 回答