We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 38538
    • 30 Posts
    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?
      • 20215
      • 144 Posts
      Ciao mau,
      non ne sono assolutamente sicuro ho molte lacune a riguardo, ma potrebbe essere un problema di ruoli?
      Ho notato che aggiungi l'utente al gruppo senza assegnargli un ruolo e usi set('authority', 9999);

      http://rtfm.modx.com/display/revolution20/Roles
        ----------------------------------
        canale irc Italiano #modx server: tophost.azzurra.org
        • 38538
        • 30 Posts
        Quote from: mopmodx at Apr 24, 2013, 12:52 PM
        Ciao mau,
        non ne sono assolutamente sicuro ho molte lacune a riguardo, ma potrebbe essere un problema di ruoli?
        Ho notato che aggiungi l'utente al gruppo senza assegnargli un ruolo e usi set('authority', 9999);

        http://rtfm.modx.com/display/revolution20/Roles

        Ciao mopmodx,
        intanto grazie per la risposta.

        Nel mio caso gli utenti quando si registrano vengono automaticamente inseriti nel gruppo "Pubblicatori", gruppo utenti associato al resource group "Pannello Utente", con il ruolo di Member (che ha authority 9999). In questo caso sto settando allo stesso modo il ruolo minimo "Member" (9999) anche per l'accesso al contesto e al gruppo di risorse associato al user group, creato per il singolo utente. Quando viene inserito l'utente nel suo user group, viene assegnato automaticamente il ruolo "Member" (9999).

        Spero di essermi spiegato!
        • Ciao, puoi provare a forzare l'appartenenza del gruppo "anonimo" a un gruppo risorse e assegnarli una politica di accesso vuota?
          Mi sembra di aver letto di questo problema che se non neghi specificatamente l'accesso di un gruppo nascono dei problemi simili al tuo...
            TilliLab | MODX Ambassador
            website
            • 38538
            • 30 Posts
            Quote from: tillilab at Apr 26, 2013, 10:05 AM
            Ciao, puoi provare a forzare l'appartenenza del gruppo "anonimo" a un gruppo risorse e assegnarli una politica di accesso vuota?
            Mi sembra di aver letto di questo problema che se non neghi specificatamente l'accesso di un gruppo nascono dei problemi simili al tuo...

            Potrebbe essere una buona soluzione, ma da quello che mi ricordo il gruppo anonymous di default non ha accesso a gruppi di risorse, se non assegnandoli specificatamente il permesso. La cosa strana è che fino a prima di inserire il gruppo utenti specifico per ogni utente, gli utenti anonimi non avevano accesso alle pagine in "Pannello Utente" proprio perché non esplicitatamente abilitati, mentre adesso le pagine protette sono visibili anche agli anonimi.

            Comunque ho postato il problema anche nella sezione standard in inglese, se qualcuno vuole darci un'occhiata per capirci qualcosa in più, qualsiasi aiuto è ben accetto!

            http://forums.modx.com/thread/84122/problem-with-protected-resources-visible-to-anonymous#dis-post-464431
            • Ho letto la discussione inglese, Bob che ti ha risposto è un mito, ma se riesci a vedere tutto il suo video e a orientarti sappi che poi hai il dovere morale di fare un riassunto al meetup di bologna sabato prossimo... smiley
                TilliLab | MODX Ambassador
                website
                • 38538
                • 30 Posts
                Quote from: tillilab at Apr 27, 2013, 09:17 AM
                Ho letto la discussione inglese, Bob che ti ha risposto è un mito, ma se riesci a vedere tutto il suo video e a orientarti sappi che poi hai il dovere morale di fare un riassunto al meetup di bologna sabato prossimo... smiley
                Guarda, è una settimana che sbatto la testa su questo problema e al momento non so davvero che pesci pigliare, quindi se mi date una mano a risolverlo vi faccio anche un seminario intero sulle ACL.. smiley e vivo anche a Bologna! ehehe
                • Ma giusto per curiosità, controllando dal pannello di controllo il gruppo utenti "anonimo" non ha accesso ad alcun gruppo, giusto?
                    TilliLab | MODX Ambassador
                    website
                    • 38538
                    • 30 Posts
                    Quote from: tillilab at Apr 30, 2013, 07:58 AM
                    Ma giusto per curiosità, controllando dal pannello di controllo il gruppo utenti "anonimo" non ha accesso ad alcun gruppo, giusto?

                    Ovviamente no... sulla discussione in inglese hanno pure scritto che per vietare l'accesso alla risorsa da parte di un altro gruppo utenti dovrei inserirgli l'ACL per il gruppo di risorse con solo privilegi "Load", cosa di cui non avevo mai sentito parlare e neanche funziona.

                    Comunque ho notato che se provo a ripulire tutti i permessi e le sessioni dal manager (la funzione che slogga gli utenti, per intenderci) mi da un alert di errore con scritto "flush_session_err", senza però indicarmi nient'altro... non vorrei che le sessioni non venissero ripulite e di conseguenza tutte le modifiche che apporto alle ACL non venissero applicate. Nei Log di MODX non compare nulla relativo a questo errore, potrebbe incidere sul mio problema? Cosa posso fare per verificare che le sessioni vengano effettivamente ripulite?
                    • Magari i log standard di php dentro error.log contengono qualche info in più? Li hai già controllati?
                      Poi potresti provare a cambiare il gestore delle sessioni:

                      http://rtfm.modx.com/display/revolution20/session_handler_class

                      per vedere se aggiri il problema di flush_session...
                        TilliLab | MODX Ambassador
                        website