Come misura di sicurezza, SuiteCRM limita l’accesso diretto ai file caricati nel sistema, come le immagini dei prodotti. Questo impedisce di visualizzarle nelle schede e nelle stampe. Come possiamo risolvere il problema senza modificare le limitazioni imposte da SuiteCRM alle cartelle?!Per chi lavora con i prodotti di SuiteCRM ed utilizza l’applicativo anche per le stampe, è un problema fastidioso, ma facilmente risolvibile attraverso l’utilizzo dei Logic Hooks.
Tramite i Logic Hooks possiamo dire al sistema di andare a salvare l’immagine del prodotto in una cartella a nostra scelta, questo ci permetterà di aggirare le limitazioni imposte dal CRM, senza compromettere la sicurezza dei documenti inseriti nel CRM. Infatti modificando le direttive di accesso alle cartelle apriremmo una piccola falla attraverso la quale si potrebbe accedere direttamente a tutti i file caricati su SuiteCRM, dai documenti ai file di importazione.
L’azione è semplice. E’ sufficiente intercettare il salvataggio del prodotto e modificare la cartella dove sarà salvata l’immagine del prodotto.
Come prima cosa è necessario creare la nuova cartella che dovrà contenere le immagini, supponiamo di crearla nella cartella dove è installato SuiteCRM. La nuova cartella avrà nome “images”
custom/modules/AOS_Products/logic_hooks.php
1 2 3 4 5 6 7 8 9 10 |
$hook_version = 1; $hook_array['before_save'][] = Array( 1, 'before_save sposta la immagine del prodotto prima del salvataggio', 'custom/modules/AOS_Products/SIT_logic_hooks_class.php', 'SIT_logic_hooks_class', 'before_save_product' ); |
custom/modules/AOS_Products/SIT_logic_hooks_class.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
if (!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); class SIT_logic_hooks_class{ function before_save_product($bean, $event, $arguments){ global $sugar_config; if(isset($_FILES) && array_key_exists('uploadimage',$_FILES) && $_FILES['uploadimage']['error'] <= 0 && strlen(trim($_FILES['uploadimage']['name'])) > 0 ){ $upload_dir = $sugar_config['upload_dir']; $tmp = explode("/", $bean->product_image); $name = $tmp[(count($tmp)-1)]; $bean->product_image=$sugar_config['site_url'].'/images/'.$name; rename($upload_dir.$name, 'images/'.$name); } } } |
Nella nostra sezione dei moduli, è presente l’evoluzione di questo Logic Hook in formato installabile utilizzabile anche su installazioni del CRM in sottodirectory del dominio.