CakePHP:是否可以从控制器访问受保护的功能?

时间:2013-02-09 01:01:29

标签: php cakephp

我在控制器some_controller中编写了两个允许某人下载文件的操作。程序如下:

  1. 用户转到some_controller/export_data并点击表单以生成文本文件。
  2. 然后,操作export_data()为用户写入文本文件。
  3. 一旦检测到文件已生成,则会显示另一个按钮,供用户单击以通过“媒体视图”下载文件。此操作为some_controller/download_file
  4. 我的问题是,如何让用户手动无法访问some_controller/download_file?即我想阻止用户在浏览器中输入此URL并下载文件。我尝试设置protected function _download_file(),但这会导致视图无法访问some_controller中的操作。

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

2 个答案:

答案 0 :(得分:2)

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

  1. some_controller/export_data操作中设置会话变量

  2. some_controller/download_file操作中,首先检查该会话变量。

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

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

  5. 通过这种方式,您可以指定some_controller/download_file public个访问权限。

    如果用户直接访问some_controller/download_file action,则会话变量不会出现,他无法下载该文件。

答案 1 :(得分:1)

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

  1. 在export_data中生成表示文件
  2. 的随机密钥(即1234)
  3. 当按钮出现时,url包含代表文件的密钥(即../ some_controller / download_file?key = 1234)
  4. 在download_file中,检查该密钥是否存在并表示可以下载的文件。如果密钥是好的,请给他们文件,如果没有显示错误信息。