更新vTiger 6.2后,照片不会出现

时间:2015-02-04 08:02:49

标签: image updates photo vtiger avatar

更新或全新安装vtiger 6.2后,联系人照片可能无法显示。它看起来像一个死链接。

4 个答案:

答案 0 :(得分:4)

问题

vTiger 6.2将您上传的所有内容(包括用户和产品图片)放入/存储,并通过htaccess-File(/storage/.htaccess)拒绝从网络访问此文件夹:

deny from all

这些文件只能由webserver / php直接访问,从安全的角度来看这是完美的,它应该保持这种方式(删除这个htaccess文件是一件非常糟糕的事情,因为那时外面的每个人都会是能够阅读你的文件,因为他有正确的路径)!!!

在Web应用程序中处理这些文件的正确方法是永远不要直接在HTML中引用文件(<img src="path/to/file">,因为你不会因为htaccess-File而看到它们),而是始终路由他们的数据通过gateway-PHP-Script检查请求用户是否经过身份验证(<img src="file.php?filename=path/to/file">)。 PHP脚本可以(如上所述)绕过Apache / htaccess-Security,因为它直接访问文件系统。这可以在文档部分中完成,您可以看到下载文件会导致&#34; http://domain/index.php?module=Documents&action=DownloadFile&record=10&fileid=11&#34;

但是,不幸的是,vTiger在其Web应用程序中仍有位置,它仍然直接在HTML中引用/ storage中的文件,因为用户图片和产品图片不会显示它们。

更新:修正错误

我发现应用联系人,用户和产品存在此问题。 我分两步对它们进行了修改:

为每个应用程序添加操作作为Gateway-Scripts

创建文件(vTiger安装在/ opt / vtiger上)

/opt/vtiger/modules/Users/actions/DownloadPicture.php

<?php

class Users_DownloadPicture_Action extends Vtiger_Action_Controller {

    public function checkPermission(Vtiger_Request $request) {
            $moduleName = $request->getModule();

            if(!Users_Privileges_Model::isPermitted($moduleName, 'DetailView', $request->get('record'))) {
                    throw new AppException(vtranslate('LBL_PERMISSION_DENIED', $moduleName));
            }
    }

    public function process(Vtiger_Request $request) {

            $userRecordModel = Vtiger_Record_Model::getInstanceById($request->get('record'), $request->getModule());
            $userPictureDetails = $userRecordModel->getImageDetails();
            $pictureData = file_get_contents($userPictureDetails[0]['path'] . '_' . $userPictureDetails[0]['orgname']);

            header("Content-type: image/jpeg");
            header("Pragma: public");
            header("Cache-Control: private");

            echo $pictureData;

    }
}

?>

/opt/vtiger/modules/Products/actions/DownloadPicture.php

同样但是:class Products_Download...

/opt/vtiger/modules/Contacts/actions/DownloadPicture.php

同样但是:class Contacts_Download...

使用网关脚本调整模板以提供图像标记

进入文件,找到<img ... > - 标签并更改其src-Attribute:

/opt/vtiger/layouts/vlayout/modules/Users/ListViewContents.tpl

index.php?module={$MODULE}&action=DownloadPicture&record={$LISTVIEW_ENTRY->get('id')}

/opt/vtiger/layouts/vlayout/modules/Users/PreferenceDetailViewHeader.tpl

index.php?module={$MODULE}&action=DownloadPicture&record={$RECORD->get('id')}

/opt/vtiger/layouts/vlayout/modules/Users/UserViewHeader.tpl

index.php?module={$MODULE}&action=DownloadPicture&record={$RECORD->get('id')}

/opt/vtiger/layouts/vlayout/modules/Vtiger/DetailViewBlockView.tpl

index.php?module={$MODULE}&action=DownloadPicture&record={$RECORD->get('id')}

/opt/vtiger/layouts/vlayout/modules/Vtiger/uitypes/Image.tpl

index.php?module={$MODULE}&action=DownloadPicture&record={$RECORD_ID}

/opt/vtiger/layouts/vlayout/modules/Contacts/DetailViewHeaderTitle.tpl

index.php?module={$MODULE}&action=DownloadPicture&record={$RECORD->get('id')}

现在肯定你可以在任何地方看到你的照片,但是如果没有登录你就无法访问这些文件!

可能存在的问题:我对vTiger中的权限管理了解不多,告诉您现在只有对记录具有访问权限的用户才能访问这些文件。现在每个用户都可以访问它们。如果有人知道如何控制这个。请评论!

希望一切顺利,就像我一样。

SERVUS 卢卡斯

答案 1 :(得分:-1)

要解决此问题,只需通过FTP客户端连接到服务器即可。清空或删除“/ storage”文件夹中的“.htaccess”文件。 就是这样!

答案 2 :(得分:-1)

或.htaccess文件更改为:

deny from all

为:

Options -Indexes

答案 3 :(得分:-1)

我重写了我的.htaccess文件来自&#34;拒绝所有&#34;为...

    # If the URI is an image then we allow accesses
    SetEnvIfNoCase Request_URI "\\.(gif|jpe?g|png|bmp)$" let_me_in

    Order Deny,Allow
    Deny from All
    # Allow accesses only if an images was requested
    Allow from env=let_me_in

现在我的图像出现了。