我正在寻找CakePHP最佳做法,在客户端进行身份验证后为其提供文件夹/文件。我知道使用基于.htpasswd/.htaccess
的解决方案更简单,但我想知道更好的方法。
我想创建一个客户端区域,经过身份验证的客户端可以看到私人文件夹的内容。例如。在CMS集成之前测试一些静态html模板或上传一些文档,如评论截图或pdf文件。
用例可以是:
有什么建议吗?
答案 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)
我认为最简单的方法是使用数据库结构。
无论如何,文件都存储在服务器上,无所谓。
您的工作方式如下:
在数据库中创建一个名为DataFile的表(由于“File”导致Cake“File”类出现问题)。字段应类似于:id,data_folder_id,name,size,mime_type等。使用符合您需求的内容。
在数据库调用DataFileFolder中创建一个表。这里的字段:id,parent_id,name,visible。同上,无论满足您的需求。
我认为这是控制此类文件夹访问权限的最佳和最简单的方法。 如果它不是你的服务器有post_max_size等有一些限制,你应该考虑一个外部脚本(或者如果你有时间的话,自己写它;))通过ftp加载这些文件。
您还可以考虑在ftp上访问的文件夹以上传文件。在后端的“新文件”对话框中,将输出该文件夹,您可以通过复制它(当然是通过PHP)将文件包含到系统中。优点:只有一个上传(如果你使用之前提到的ftp上传方法,它只有两个。)
如果您只是与客户共享文件,并且那些客户端将无法访问基于您的cakephp项目的任何其他内容,则只需将ftp与每个客户端的文件夹一起使用即可。更快,更容易处理,因为您可以发送他们的网址,如“ftp:// username:password@yourserver.com”并完成。他们登录后,他们可以查看html文件,因为他们通过浏览器访问ftp,它应该是noob安全的。
希望这一切都能满足您的需求:)
问候 func0der