CakePHP:身份验证后访问私人文件夹

时间:2012-03-23 19:19:35

标签: cakephp user-management file-access

我正在寻找CakePHP最佳做法,在客户端进行身份验证后为其提供文件夹/文件。我知道使用基于.htpasswd/.htaccess的解决方案更简单,但我想知道更好的方法。

它的用途是什么?

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

用例可以是:

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

有什么建议吗?

2 个答案:

答案 0 :(得分: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
        }
    }

答案 1 :(得分:1)

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

无论如何,文件都存储在服务器上,无所谓。

您的工作方式如下:

  1. 在数据库中创建一个名为DataFile的表(由于“File”导致Cake“File”类出现问题)。字段应类似于:id,data_folder_id,name,size,mime_type等。使用符合您需求的内容。

  2. 在数据库调用DataFileFolder中创建一个表。这里的字段:id,parent_id,name,visible。同上,无论满足您的需求。

  3. 如果需要,在客户端表或整个关联表中创建关联键。 (例如:一个客户端和50个不同位置的文件夹)。请注意您创建的关联。如果您使用Client-> DataFolder,则客户端可以自动访问该文件夹中的所有文件。
  4. 使用索引前端方法和管理操作以及视图烘焙模型和FileController。
  5. 优化用于创建文件或文件夹记录的管理方法。
  6. 前端的索引方法有一个参数,表示文件夹ID。您输出每个文件夹中的每个文件夹和文件,从允许用户访问的第一个文件夹开始。如果这些文件夹位于新“文件管理器”的不同级别,您也可以输出允许用户访问的文件夹列表。您必须检查每个新页面调用对给定文件夹ID的权限。但我觉得这很清楚。
  7. 根据上述媒体视图实现文件的下载方法。这应该是它。
  8. 我认为这是控制此类文件夹访问权限的最佳和最简单的方法。 如果它不是你的服务器有post_max_size等有一些限制,你应该考虑一个外部脚本(或者如果你有时间的话,自己写它;))通过ftp加载这些文件。

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

    如果您只是与客户共享文件,并且那些客户端将无法访问基于您的cakephp项目的任何其他内容,则只需将ftp与每个客户端的文件夹一起使用即可。更快,更容易处理,因为您可以发送他们的网址,如“ftp:// username:password@yourserver.com”并完成。他们登录后,他们可以查看html文件,因为他们通过浏览器访问ftp,它应该是noob安全的。

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

    问候 func0der