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

CakePHP:身份验证后访问私人文件夹,cakephp,user-management,file-access,Cakephp,User Management,File Access,我正在寻找一种CakePHP最佳实践,在客户机获得身份验证后为其提供文件夹/文件。我知道使用基于.htpasswd/.htaccess的解决方案更简单,但我想知道更好的方法 这是干什么用的? 我想创建一个客户端区域,通过身份验证的客户端可以在其中查看私有文件夹的内容。例如,在CMS集成之前测试一些静态html模板,或上传一些文档,如评论截图或pdf文件 用例可以是: 创建新客户端(仅由管理员创建) 为同一客户端的不同用户生成登录凭据 创建新的客户端文件夹(仅由管理员创建) 将一些静态ht

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

这是干什么用的? 我想创建一个客户端区域,通过身份验证的客户端可以在其中查看私有文件夹的内容。例如,在CMS集成之前测试一些静态html模板,或上传一些文档,如评论截图或pdf文件

用例可以是:

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

有什么建议吗?

你知道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
        }
    }

你知道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
        }
    }

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

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

这就是你要做的:

  • 在数据库中创建一个名为DataFile的表(由于“File”会导致Cake“File”类出现问题)。字段应该类似于:id、数据文件夹id、名称、大小、mime类型等。根据需要使用

  • 在数据库调用DataFileFolder中创建一个表。此处的字段:id、父项id、名称、可见。如上所述,任何适合您的需求

  • 如果需要,在客户机表或整个关联表中创建关联键。(例如:一个客户端和50个文件夹位于不同的位置)。请注意您创建的关联。如果使用Client->DataFolder,客户端将自动访问该文件夹中的所有文件
  • 烘焙模型和具有索引前端方法和管理操作以及视图的FileController
  • 优化用于创建文件或文件夹记录的管理方法
  • 前端的索引方法有一个表示文件夹id的参数。从允许用户访问的第一个文件夹开始,输出文件夹中的每个文件夹和文件。如果这些文件夹位于新“文件管理器”的不同级别上,您也可以只输出允许用户访问的文件夹列表。您必须检查给定文件夹id的每个新页面调用的权限。但我认为这很清楚
  • 实现基于上述媒体视图的文件下载方法。应该是这样
  • 我认为这是控制此类文件夹访问的最佳和最简单的方法。 由于存在一些限制,如果不是您的服务器,请按post_max_大小等进行设置。您可能应该考虑使用外部脚本(如果有时间,也可以自己编写)通过ftp加载这些文件

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

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

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

    问候
    func0der

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

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

    这就是你要做的:

  • 在数据库中创建一个名为DataFile的表(由于“File”会导致Cake“File”类出现问题)。字段应该类似于:id、数据文件夹id、名称、大小、mime类型等。根据需要使用

  • 在数据库调用DataFileFolder中创建一个表。此处的字段:id、父项id、名称、可见。如上所述,任何适合您的需求

  • 如果需要,在客户机表或整个关联表中创建关联键。(例如:一个客户端和50个文件夹位于不同的位置)。请注意您创建的关联。如果使用Client->DataFolder,客户端将自动访问该文件夹中的所有文件
  • 烘焙模型和具有索引前端方法和管理操作以及视图的FileController
  • 优化用于创建文件或文件夹记录的管理方法
  • 前端的索引方法有一个表示文件夹id的参数。从允许用户访问的第一个文件夹开始,输出文件夹中的每个文件夹和文件。如果这些文件夹位于新“文件管理器”的不同级别上,您也可以只输出允许用户访问的文件夹列表。您必须检查给定文件夹id的每个新页面调用的权限。但我认为这很清楚
  • 实现基于上述媒体视图的文件下载方法。应该是这样
  • 我认为这是控制此类文件夹访问的最佳和最简单的方法。 由于存在一些限制,如果不是您的服务器,请按post_max_大小等进行设置。您可能应该考虑使用外部脚本(如果有时间,也可以自己编写)通过ftp加载这些文件

    你也可以考虑在你的ft上设置一个可访问的文件夹