Salve a tutti,
il sito a cui sto lavorando ha un certo numero di pagine protette dal resourceGroup "Pannello Utente", creato con gli opportuni filtri d'accesso per il contesto web e per il gruppo utenti che vi può accedere.
Ogni utente può uploadare dei file pdf sul sito, che devono essere visualizzati solo dal suo proprietario.
Al momento dell'upload, utilizzo questo codice per creare un nuovo gruppo utenti per l'user che sta caricando il file, inserire l'user nel gruppo, creare il gruppo risorse associato al gruppo utente appena creato e creare le rispettive regole d'accesso al contesto web e al gruppo risorse:
$id = $modx->user->get('id');
$name = $modx->user->get('username');
$group = $modx->getObject('modUserGroup', array('name' => $name));
if(!$group){
$group = $modx->newObject('modUserGroup');
$group->set('name', $name);
$group->save();
$modx->user->joinGroup($name);
}else echo 'GROUP exists. ';
$res_group = $modx->getObject('modResourceGroup', array('name' => $name));
if(!$res_group){
$res_group = $modx->newObject('modResourceGroup');
$res_group->fromArray(array('name'=>$name,'private_memgroup'=>0,'private_webgroup'=>0));
$res_group->save();
}else echo 'RES_GROUP exists. ';
$doc_folder = $modx->getObject('modResource', array('alias' => $id.'-uploads'));
if(!$doc_folder){
$upload_doc = $modx->getObject('modResource', array('alias' => 'uploads'));
$upload_id = $upload_doc->get('id');
$doc_folder = $modx->newObject('modResource');
$doc_folder->fromArray(array(
'alias' => $id.'-uploads',
'pagetitle' => $id.'-uploads',
'longtitle' => $id.'-uploads',
'description' => $id.'-uploads: cartella di upload utente',
'parent' => $upload_id,
'isfolder' => 1,
'createdby' => $id
));
$doc_folder->save();
$doc_folder->joinGroup($res_group);
//set the resourceGroupAccess policy
$resourceGroupAccess = $modx->newObject('modAccessResourceGroup');
$resourceGroupAccess->set('target', $res_group->get('id'));
$resourceGroupAccess->set('principal_class', 'modUserGroup');
$resourceGroupAccess->set('principal', $group->get('id'));
$resourceGroupAccess->set('authority', 9999);
$resourceGroupAccess->set('policy', 4 ); // 4 for Load, List and View
$resourceGroupAccess->set('context_key', 'web');
$resourceGroupAccess->save();
//set the contextAccess policy
$contextAccess = $modx->newObject('modAccessContext');
$contextAccess->set('target', 'web');
$contextAccess->set('principal_class', 'modUserGroup');
$contextAccess->set('principal', $group->get('id'));
$contextAccess->set('authority', 9999);
$contextAccess->set('policy', 4 ); // 4 for Load, List and View
$contextAccess->save();
} else echo 'DOC_FOLDER exists. ';
Il codice funziona e crea correttamente, se non esiste, il gruppo utenti, il gruppo risorse e le regole d'accesso relative all'utente che sta caricando.
Fatto ciò, ho inserito dal manager una risorsa statica con opportuno type .PDF linkata ad un file di prova, che viene correttamente visualizzata.
Il problema è che, pur proteggendo opportunamente la risorsa statica assegnandola al gruppo risorse specifico dell'utente, questa risorsa è visibile da utenti anche non loggati. Stesso problema mi si verifica ora con le risorse appartenenti al gruppo risorse "Pannello Utente" citato all'inizio del post, che tuttavia era correttamente protetto dagli utenti anonimi prima di aggiungere questo nuovo gruppo di risorse... Ho seguito la classica guida
http://rtfm.modx.com/display/revolution20/Making+Member-Only+Pages per creare le risorse del gruppo "Pannello Utente" e funzionava correttamente; ho seguito la stessa guida per scrivere questo codice ma non funge e non funge neanche più la restrizione su "Pannello Utente".
Com'è possibile che pur proteggendo le risorse siano visibili agli utenti anonimi? C'è qualche errore di configurazione nella creazione del gruppo e delle regole?