[Risolto] - "Simulare" una pagina di ACCESSO NEGATO 403 mantenendo la visibilità della voce di Menu

15 contenuti / 0 new
Ultimo contenuto
[Risolto] - "Simulare" una pagina di ACCESSO NEGATO 403 mantenendo la visibilità della voce di Menu

Ciao a tutti!

Come al solito (o spesso...) la soluzione sta dietro l'angolo...

1. Scaricare il modulo Menu per Role > http://drupal.org/project/menu_per_role e attivarlo in > admin/build/modules

2. Creare 2 pagine ("Pagina Registered Consentita" e "Pagina Anonymous Negata") e assegnare alle 2 voci di menu (io ho usato i Secondary Links...) lo "stesso identico titolo" (es. Modelli)

3. Portarsi in > admin/build/menu-customize/secondary-links dove dovremmo vedere i 2 Menu item appena creati (Modelli / Modelli), appunto...

4. Click su "Edit" del primo menu (nel mio caso equivale a "Pagina Registered Consentita") e, a fondo pagina, click su > "Restrict item visibility" per espanderlo (se non lo fosse già...)

5. Sotto la voce > "Show menu item only to selected roles:" mettere il flag su > "authenticated user" - salvare

6. Click su "Edit" del secondo menu (nel mio caso equivale a "Pagina Anonymous Negata") e, a fondo pagina, click su > "Restrict item visibility" per espanderlo (sempre che non lo fosse già...)

7. Sempre sotto la voce > "Show menu item only to selected roles:" questa volta spuntiamo > "anonymous user" - salvare

Fatto!

- Quando un utente Anonymous accede al sito vede il link "Modelli" per gli Anonymous (node/1)
- Viceversa, i Registered vedono sempre il link Modelli (che ha lo stesso nome ma non è lo stesso... scusate il giro di parole...) ma, in realtà è la voce Modelli di "node/2" che andrà a mostrare (ovviamente...) il contenuto del "node/2" appunto...

Quindi, senza nemmeno usare i vari moduli: Content Access, TAC, Node Access etc etc... le voci di menu (con i loro rispettivi nodi associati e ben distinti...) switchano mostrando i loro contenuti diversi in base al tipo di utente/ruolo che è nel nostro sito in un determinato momento...

Va da se, che la pagina/nodo che vedranno gli Anonymous (notare che è una pagina/nodo assolutamente "libera" da controlli vari e quindi senza problemi e/o sorprese di nessun tipo potenzialmente creati da eventuali "moduli" per il controllo degli accessi...) la personalizzeremo es. NON sei autorizzato a vedere questa pagina - Registrati con un bel link a > "user/register" o quello che vogliamo...

Mi sembra di aver capito che i vari moduli per il controllo degli accessi (Content Access, TAC, Node Access etc etc...) servano di più per le "rifiniture" piuttosto che controllare la BASE dei permessi... (soprattutto se ci sono di mezzo link di menu...)

In realtà, in tutto questo la pagina 403 non viene chiamata in causa per niente, mostriamo semplicmente contenuti diversi ai vari utenti.

Un piccolo ma trascurabile "fastidio" è, che se dovessimo avere molti menu di questo tipo nei Primary e/o Secondary Links, quando siamo nel nostro sito come Admin, tali menu li vedremmo riportati 2 volte (doppi) ma, una volta usciti, tutto ritorna normale...

Qui c'è una demo online a disposizione di tutti (accesso per Admin compreso per eventuali prove...)
http://www.giuliweb.com/dplmenuroledemo/

Ciao
Kipper

Mah... che abbia scoperto l'acqua calda...

Non hai scoperto l' acqua calda, hai dato informazioni preziose, anche se non ho letto niente.
Torneranno sicuramente utili.
Giovanni

Uhm... forse non ti piacerà quello che scrivo...

Va benissimo questo tecnica di 'menù multiple', se accetti che devi creare due, tre, o più menù secondo i numeri di ruoli...

Ma, come spiegato nella sua pagina, Menu per role non protegge i nodi. Se l'utente anonimo va direttamente su node/2 vede tutto. (Google search? Link in Facebook? Link su DrupalItalia.org?)

E' un pò il vecchio discorso del "sicurezza tramite oscurità". Puoi decidere se sono troppo paranoico, quanto è facile 'scoprire' quei URL, e quanto dannoso se vengono visti dai 'non autorizzati'...

Per un intranet o sito aziendale non sarebbe accettabile, per esempio.

Preferivo la tua idea di proteggere i nodi (TAC va bene) e creare i menù 'a mano'... Stesso sforzo necessario (forse di più se cambi gli elementi) ma con i nodi protetti.

Più imparo, più dubito.

Ok, grazie John... me lo sentivo che qualcosa non andava bene... mi sfuggiva... non era sotto controllo... e tu me lo hai confermato...

John wrote:
Preferivo la tua idea di proteggere i nodi (TAC va bene) e creare i menù 'a mano'... Stesso sforzo necessario (forse di più se cambi gli elementi) ma con i nodi protetti.

Ok, Seguirò questa strada (se riesco a "rimpiazzare" la regione dei Secondary links con un DIV orizzontale nel quale inserire i pulsanti di menu "statici" - flash - css etc... - tanto non andranno cambiati, al massimo se ne cambierà uno ogni tot di tempo...)... eventualmente mi faccio vivo per il piano "B"... ci aggiorniamo...

P.S. Visto che effettivamente questo mio post porta l'utente ad una situazione assolutamente NON sicura, credo sia necessario cancellarlo non credi? Anzi, mi sa che è proprio da togliere!

Secondo P.S.
Per la creazione del menu ho pensato di eliminare completamente i Primary e Secondary Links sostituendoli con un mio DIV orizzontale, come ho già detto...
In page-tpl.php del tema garland ho individuato il codice che stampa i menu e cioè questo (alla riga 50 più o meno...):

<?php if (isset($primary_links)) : ?>
          <?php print theme('links', $primary_links, array('class' => 'links primary-links')) ?>
        <?php endif; ?>
        <?php if (isset($secondary_links)) : ?>
          <?php print theme('links', $secondary_links, array('class' => 'links secondary-links')) ?>
        <?php endif; ?>

Naturalmente se sostituisco questo codice con un mio DIV (posizionandolo ovviamente con i vari comandi CSS "border-left" - "border-top" "Padding etc etc etc...") faccio apparire quello che voglio e, la mia ultima domanda/dubbio è:
Questo codice è fine a se stesso o fa riferimento a qualche altro parametro (script PHP...) importante che potrebbe riservarmi delle sorprese future (togliendolo, appunto...)!?

Non penso... spariscono i Primary e Secondary e il tutto finisce qui, credo... si, rimangono in giro i riferimenti nello style.css ma a questo punto sono "orfani" ...altre cose da "piombare" non mi sembra di vederne all'orizzonte o sbaglio?

Spero di essermi spiegato

Grazie

Ciao
Kipper

kipper wrote:
...P.S. Visto che effettivamente questo mio post porta l'utente ad una situazione assolutamente NON sicura, credo sia necessario cancellarlo non credi? Anzi, mi sa che è proprio da togliere!

No - ci sono anche i miei bits: http://www.drupalitalia.org/node/10156#comment-32744 ;-)

kipper wrote:
Secondo P.S.
Per la creazione del menu ho pensato di eliminare completamente i Primary e Secondary Links sostituendoli con un mio DIV orizzontale, come ho già detto...
In page-tpl.php del tema garland ho individuato il codice che stampa i menu e cioè questo (alla riga 50 più o meno...):
<?php if (isset($primary_links)) : ?>
          <?php print theme('links', $primary_links, array('class' => 'links primary-links')) ?>
        <?php endif; ?>
        <?php if (isset($secondary_links)) : ?>
          <?php print theme('links', $secondary_links, array('class' => 'links secondary-links')) ?>
        <?php endif; ?>

Naturalmente se sostituisco questo codice con un mio DIV (posizionandolo ovviamente con i vari comandi CSS "border-left" - "border-top" "Padding etc etc etc...") faccio apparire quello che voglio e, la mia ultima domanda/dubbio è:
Questo codice è fine a se stesso o fa riferimento a qualche altro parametro (script PHP...) importante che potrebbe riservarmi delle sorprese future (togliendolo, appunto...)!?

Non penso... spariscono i Primary e Secondary e il tutto finisce qui, credo... si, rimangono in giro i riferimenti nello style.css ma a questo punto sono "orfani" ...altre cose da "piombare" non mi sembra di vederne all'orizzonte o sbaglio?


Si. Ovviamente puoi copiare l'HTML dei primary/secondary - visto da autorizzato. Anzi se metti un test:
<?php if (array_search('boss', $user->roles)): ?>
  <?php if (isset($primary_links)) : ?>
    <?php print theme('links', $primary_links, array('class' => 'links primary-links')) ?>
  <?php endif; ?>
  <?php if (isset($secondary_links)) : ?>
    <?php print theme('links', $secondary_links, array('class' => 'links secondary-links')) ?>
  <?php endif; ?>
<?php else: ?>
  <!-- menù statico in HTML -->
<?php endif; ?>

puoi avere tutti e due. Nel tuo caso bisogna anche aggiungere il test di linguaggio...

John

Più imparo, più dubito.

Grazie John come sempre per le tue preziosissime "pillole"...

Ciao
Giuliano

@Kipper
probabilmente non ho le tue competenze...ma seguendo i tuoi suggerimenti del 20/06/2010 - 07:03, nessuna delle due pagina è visibile all'utente anonymus...
fatto due volte, alla lettera, niente... :-((. cosa sbaglio? a me potrebbe andar bene anche con i limiti evidenziati da jhl.verona...
eppure mi sembra di aver visto una installazione in cui questa situazione era riprodotta e fungeva...

Ok, eccola:
http://www.giuliweb.com/dplmenuroledemo/

Comunque se guardi bene al primo post (in questa pagina...) il link c'è - entri come admin, e ti guardi i settaggi...

Ciao
Kipper

John ho un piccolo problema nel controllo del DIV del mio Menu Statico...
Questo il codice dove ho inserito il mio DIV:

<?php if (array_search('boss', $user->roles)): ?>
  <?php if (isset($primary_links)) : ?>
    <?php print theme('links', $primary_links, array('class' => 'links primary-links')) ?>
  <?php endif; ?>
  <?php if (isset($secondary_links)) : ?>
    <?php print theme('links', $secondary_links, array('class' => 'links secondary-links')) ?>
  <?php endif; ?>
<?php else: ?>
  <div id='mio_menu_statico'>
     Mio contenuto statico...
   </div>
<?php endif; ?>

...e questo il codice nell'HEAD:

<style>
#mio_menu_statico {
color: #fff000;
margin-left: 400px;
margin-top: 30px;
}
</style>

Il problema è che il "margin-left: 400px;" funziona - infatti il testo viene spostato a destra di 400px... ma io ho anche l'esigenza di abbassarlo questo mio contenuto statico e, se provo ad aggiungere allo style "margin-top: 30px;", oltre al testo, mi sposta in basso anche il top/head del template andando così a "sballare il layout"...

Questa è la schermata con solo l'attributo "margin-left: 400px;" ed è OK, il testo viene spostato a destra di 400px:

Mentre questa è la schermata con l'aggiunta dell'attributo "margin-top: 30px;" - che va a sballare il layout:

Mah... secondo te dove sta la soluzione e perchè non viene abbassato solo il testo statico!? ...come devo fare per rendere questo DIV completamente indipendente? ...davvero non saprei proprio...

Grazie

Ciao
Kipper

...la cosa che non capisco è che analizzando con Firebug si vede chiaramente che l'elemento è "indipendente" e quindi l'attributo "margin-top: 30px" dovrebbe "agire" solo sul mio contenuto statico...

Ecco la conferma... credo:

E' ovvio che c'è qualche cosa che non va... sto lavorandoci su, ma non riesco a vedere una via... sto pensando che forse, la causa potrebbe essere che sto operando su "page.tpl.php" e, questi lavori con css di solito li faccio su "node.tpl.php"

Porco cane! ...ho già pronto il mio bel menu a pulsanti in flash con transparent bg!!!

Kipper

Il testo statico non viene abbassato perchè non è estratto dal flusso del contenuto.
O usi un padding-top:30px o posizioni in maniera assoluta il tuo testo statico e gli dai un margin-top:30px
ma forse arrivo tardi

Non arrivi in ritardo... Funziona!!!
...ti giuro che avevo pensato di mettere "padding-top:30px" e l'ho messo, ma non produceva nessun cambiamento... evidentemente, nel fare i vari test, ho lasciato per strada una qualche chiusura tipo ";" o qualche altra banalità:

Come si vede adesso è OK!

Ringraziamenti a Pix e John per i preziosi aiuti...

Ciao
Kipper

Ciao Kipper,

forse è un po tardi perchè hai gia trovato la tua soluzione, ma lo dico in modo tale che ci può essere un confronto e si può aiutare qualcun'altro se quanto dico è giusto oppure imparerò io qualcosa se quanto detto è sbagliato.

Per tutto l'ambaradan dei nodi nascosti e non e dei rispettivi link ke scompaiono, la soluzione mi appare semplicissima e pertanto accetto volentieri smentite. Io farei così:

Usando un unico menù (non due), ad es. Primary links ed usando due tipi di contenuto separati, uno per creare le pagine per i registrati e l'altro per creare le pagine personalizzate per dire agli anonimi ke si devono registrare e linkarli alla registrazione/login. Usando un modulo per controllare i permessi come content access (tac non l'ho mai usato) imposti che i nodi di un tipo sono per i registrati e i nodi dell'altro sono SOLO per anonimi.
Dai il link alla pagina x registrati,ad es PRIMI PIATTI nel menù Primary links che ovviamente scomparirà per gli anonimi e poi con l'altro tipo di contenuto opportunamento bloccato ai registrati crei la stessa pagina ma personalizzata per anonimi, dai lo stesso nome al link sempre nel menu primary links, quindi in questo caso un altro link chiamato PRIMI PIATTI ed il gioco è fatto perchè questo link poi scomparirà per i registrati.

In sostanza devi avere due pagine e 2 link doppione, questo è il fastidio, ma così si evita il problema che metteva in evidenza john con l'uso del doppio menu, e cioè le pagine non possono essere trovate da fuori come da google perchè sono realmente bloccate dal content access.

In quanto detto non ci vedo nulla di sbagliato e mi sembra anche abbastanza intuitiva e logica, ma proprio per questo temo che possa sbagliarmi....se dovete smentirmi fatelo con piacere cosiì imparo, altrimenti...ecco la solzione più semplice per ovviare al problema!

Tutorial, guide e moduli per drupal su www.cmswiki.net

ciao matteofro,
ma sai che mi sa che hai ragione ;-) ...in effetti il tuo ragionamento non fa una piega, non vedo ostacoli che possano impedire il funzionamento...

In ogni caso ho risolto con il menu statico ma la tua soluzione sarà sicuramente utile a qualcuno...

Mi chiedo come è potuta sfuggirmi questa soluzione; ci ero vicino, ce l'avevamo sotto il naso... bravo!

Ciao
Kipper