0

我创建了一个在我的站点中上传和下载文件的功能。但我想验证下载功能。如果用户已经登录到我的站点并获得下载权限,我想允许用户下载文件。

帮我。如何检查会话是否存在?我正在 /app/webroot/documents/users/ 路径中上传文件。

生成的下载链接如下:http://localhost/my_project/documents/users/TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx.jpg

谢谢你们。

4

3 回答 3

0

处理此问题的最简单方法是使用 AuthComponent 进行身份验证,使用 MediaView 处理来自页面上“下载此文件”链接的下载提示。

一个例子。

class SomeController extends AppController {
    ...
    public $components = array(
        'Auth' => array(
            ... auth settings ...
        ),
        ...
    );

    public function download( ){
        $this->view = 'Media';
        $this->set( array(
          'id' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx.jpg',
          'name' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx',
          'download' => true,
          'extension' => 'jpg',
          'path' => join( DS, array(
              APP, 'webroot', 'documents', 'users', ''
          ))
        ));
    }

这假设您将下载操作作为与 AuthComponent 相关的受限操作。如果您允许下载操作,您可以将 MediaView 代码包装在 Auth->user( ) 检查中,如下所示。

    public function download( ){
        if( $this->Auth->user( )){
            $this->view = 'Media';
            $this->set( array(
              'id' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx.jpg',
              'name' => 'TGlnaHRob3VzZS5qcGcxMjc3ODIzMTAx',
              'download' => true,
              'extension' => 'jpg',
              'path' => join( DS, array(
                  APP, 'webroot', 'documents', 'users', ''
              ))
            ));
        } else {
            ... do something else here ...
        }
    }

这只是检查 Auth 是否将有效的用户对象保存到会话中。这只应在有用户登录时发生。

几点注意事项:

我在 join( DS, array( 'path', 'parts', '' ) 调用的末尾使用了一个空白数组条目来获取路径所需的尾部斜杠。随心所欲地做 - 我部分加入我自己在构建重复的字符串或路径时。

http://book.cakephp.org/view/489/Media-Views
http://book.cakephp.org/view/563/Setting-Auth-Component-Variables

于 2010-08-12T19:12:28.833 回答
0

我可能会设置一些东西,所以你不会给他们一个直接的下载链接。我通常设置一个 AttachmentsController,带有一个 download() 方法。然后您可以运行所有您想要的权限检查(并保留文件的统计信息等)

于 2010-08-11T17:21:11.750 回答
0

在这种情况下,您可以让控制器在启用下载之前检查会话变量。
如果您使用的是 Session 组件,您可以使用以下内容在您的用户操作中检查用户的状态:

if($this->Session->read('Auth.User.id'))
{
//download file
}

不过,如何提供文件取决于您自己,但该会话检查应该在您用于提供文件的任何内容中工作,例如 Travis Leleu 的 AttachmentsController。

于 2010-08-11T20:41:23.780 回答