0

我正在寻找一种 CakePHP 最佳实践,以便在经过身份验证后向客户端提供文件夹/文件。我知道使用.htpasswd/.htaccess基于解决方案更简单,但我想知道更好的方法。

它是干什么用的?

我想创建一个客户区,经过身份验证的客户可以在其中看到私有文件夹的内容。例如,在 CMS 集成之前测试一些静态 html 模板或上传一些文档,如注释截图或 pdf 文件。

一个用例可能是:

  • 创建一个新客户端(仅限管理员)
    • 为同一客户端的不同用户生成登录凭据
  • 创建一个新的客户端文件夹(仅限管理员)
  • 将一些静态 html 上传到客户端文件夹
  • 登录后客户端可以访问该文件夹并查看html
  • 注销后对静态文件的访问受到限制

有什么建议么?

4

2 回答 2

2

你知道 CakePHP 的“媒体视图”吗?我认为你也许可以对他们做你想做的事。

快速而肮脏的例子......

    public function serve($filename = null) {
        if($filename && $this->Auth->user()) {
            $this->viewClass = 'Media';

            $params = array(
                'id'        => $filename, // full filename
                'name'      => 'example', 
                'download'  => FALSE, // true, then you get a download box
                'extension' => get_the_file_extension($filename),
                'path'      => APP . 'outside_webroot_dir' . DS
            );
            $this->set($params);
        } else {
            // redirect to login or something
        }
    }
于 2012-03-23T19:29:22.037 回答
1

我认为最简单的方法是为此使用数据库结构。

无论如何,文件都存储在服务器上,在哪里并不重要。

这就是你的做法:

  1. 在数据库中创建一个名为 DataFile 的表(由于“文件”会导致 Cake“文件”类出现问题)。字段应该类似于:id、data_folder_id、名称、大小、mime_type 等。使用适合您需要的内容。

  2. 在数据库中创建一个表调用DataFileFolder。此处的字段:id、parent_id、名称、可见。与上述相同,适合您的需求。

  3. 如果需要,在客户端表或整个关联表中创建关联键。(例如:一个客户和50个不同地方的文件夹)。请注意您创建的关联。如果您使用 Client->DataFolder,客户端将自动访问该文件夹中的所有文件。
  4. 使用索引前端方法和管理操作以及视图烘焙模型和 FileController。
  5. 优化用于创建文件或文件夹记录的管理方法。
  6. 前端的 index 方法有一个参数表示文件夹 id。从允许用户访问的第一个开始,您输出每个文件夹和文件夹中的文件。您也可以只输出允许用户访问的文件夹列表,以防这些文件夹位于新“文件管理器”的不同级别。您必须检查给定文件夹 ID 的每个新页面调用的权限。但这很清楚,我想。
  7. 实现基于上述媒体视图的文件下载方法。这应该是它。

我认为这是控制对此类文件夹的访问的最佳和最简单的方法。由于如果 post_max_size 等不是您的服务器,则存在一些限制。您可能应该考虑使用外部脚本(或者如果您有时间自己编写它;))通过 ftp 加载这些文件。

您还可以考虑在您的 ftp 上访问一个文件夹来上传文件。在后端的“新文件”对话框中,该文件夹将被输出,您可以通过复制它(当然通过 PHP)将文件包含到系统中。优点:只有一次上传(如果你使用前面提到的ftp上传方法,只有两次)。

如果您只是与客户共享文件,并且这些客户将无法访问基于您的 cakephp 项目中的任何其他内容,只需为每个客户使用带有文件夹的 ftp。更快、更容易处理,因为您可以向他们发送诸如“ftp://username:password@yourserver.com”之类的 URL 并完成。他们已登录,他们可以查看 html 文件,因为他们正在通过浏览器访问 ftp,这应该是 noob 安全的。

希望这一切都能满足您的需求:)

问候 func0der

于 2012-03-24T21:15:03.850 回答