You are currently browsing the monthly archive for marzo 2009.

A volte operazioni semplici sulla carta si rivelano più complicate del previsto.

Per semplificare la struttura degli accessi e delle autorizzazioni di un’applicazione web realizzata con ASP.NET 3.5 ho pensato di utilizzare un menu costruito tramite Sitemap regolando la possibilità di accedere alle voci di menu utilizzando i ruoli degli utenti.
In pratica per ogni nodo del file xml sitemap voglio definire i gruppi autorizzati a visualizzare la voce stessa di menu e ad accedere alle pagine.

La struttura del sito

Creiamo a partire dalla root del sito due cartelle che nomineremo CartellaA e CartellaB: le pagine web della prima cartella saranno accessibili solamente dagli utenti GruppoA mentre ovviamente quelle presenti nella CartellaB saranno accessibili da quelli del GruppoB.

La sicurezza
Per prima cosa dobbiamo gestire la sicurezza attraverso lo strumento di amministrazione del sito web.
All’interno del nostro ambiente di sviluppo selezioniamo le voci WebSite –> ASP.NET Configuration per avviare lo strumento di amministrazione del sito web.
Selezioniamo la voce Sicurezza: in quest’area è possibile definire gli Utenti, i Ruoli e le regole di accesso.
Iniziamo accedendo alla voce “Seleziona tipo di autenticazione” e selezioniamo la voce “da internet”.
Dopo aver premuto il tasto “Chiudi” creiamo un nuovo ruolo, anzi ne creiamo due: GruppoA e GruppoB.
Tramite il tasto “Indietro” ritorniamo nella schermata precedente e creiamo un po’ di utenti: innanzitutto dobbiamo ricordarci le userID e le password inserite ed inoltre dobbiamo associare gli utenti creati o al gruppoA o al gruppoB.

Abbiamo quindi creato i ruoli e gli utenti e quindi non resta che creare le regole di accesso selezionando la voce “crea regole di accesso“.

Nella nuova schermata possiamo vedere sulla sinistra  un  struttura ad albero del nostro sito. Selezioniamo la cartella radice (con il nome della nostra applicazione), le voci “utenti anonimi” e “nega” e confermiamo. In questo modo impediamo l’accesso al sito agli utenti non autenticati.
Poi successivamente selezioniamo ancora la cartella radice, selezioniamo nella combo la dicitura “GruppoA” e la voce “consenti” e confermiamo.
Ripetiamo quest’ultima operazione per il GruppoB. In questo modo consentiamo agli utenti del GruppoA e GruppoB di accedere alle pagine presenti nella root dell’applicazione web.

Ora selezioniamo nella struttura ad albero a sinistra la CartellaA. Nella combo Ruolo selezioniamo la voce “GruppoB” e poi anche “nega“.
Dopo aver confermato selezioniamo nella struttura ad albero a sinistra la CartellaB, nella combo Ruolo selezioniamo la voce “GruppoA” e poi “nega“.

Quindi in questo modo neghiamo l’accesso alle pagine web della cartellaA agli  utenti del GruppoB e viceversa per la CartellaB.

L’Autenticazione
A questo punto è necessario creare la videata di Login.
Creiamo nella root un nuovo webform che chiameremo login.aspx. All’interno di questa pagina trasciniamo dalla toolbox l’oggetto login.
Fondamentalmente, a parte i belletti vari da apportare successivamente, in questa pagina c’è tutto quello che ci serve.

Nel web.config della root dell’applicazione all’interno della sezione <system.web> assicuriamoci che ci siano le seguenti indicazioni
 
 <authentication mode=”Forms”>
  <forms loginUrl=”login.aspx”></forms>
 </authentication>
    <authorization>
        <deny users=”?” />
        <allow roles=”GruppoA” />
        <allow roles=”GruppoB”/>
    </authorization>

In questo modo obblighiamo ogni utente che acceda al nostro sito a passare prima dalla pagina di autenticazione.
Se infatti lanciamo l’applicazione e proviamo a visualizzare la pagina default.aspx automaticamente l’utente è dirottato sulla pagina di login.aspx.

Sitemap e menu

Creiamo una masterpage nella root dell’applicazione.
All’interno della CartellaA inseriamo  una nuova webform che chiameremo paginaA.aspx facendo molta attenzione che al momento della creazione sia selezionata la voce “Select Masterpage” ed ovviamente selezioniamo la masterpage appena creata.
Ripetiamo all’interno della CartellaB la creazione di  una nuova webform che chiameremo paginaB.aspx facendo sempre molta attenzione che al momento della creazione sia selezionata la voce “Select Masterpage“.

Aggiungiamo al nostro progetto una SiteMap. Selezioniamo nell’explorer di Visual Studio la root del progetto ed aggiungiamo un nuovo elemento.
Selezioniamo tra le varie proposte una Mappa del sito e lasciamo invariato il nome del file che ci viene proposto.

Nel file XML aperto dobbiamo inserire le informazioni nei siteMapNode.

<?xml version=”1.0″ encoding=”utf-8″ ?>
<siteMap xmlns=”http://schemas.microsoft.com/AspNet/SiteMap-File-1.0” >
    <siteMapNode url=”” title=””  description=””>
      <siteMapNode url=”~/CartellaA/PaginaA.aspx” title=”Pagina A” description=”pagina A” />
      <siteMapNode url=”~/CartellaB/PaginaB.aspx” title=”Pagina B” description=”pagina B” />   
    </siteMapNode>
</siteMap>

 
Ritorniamo alla Masterpage e trasciniamo al suo interno un oggetto TreeView. Per questo oggetto selezioniamo come tipo di origine dati una sitemap. Attenzione: posizioniamo l’oggetto Treeview fuori dal contentplaceholder della masterpage.

Proviamo a lanciare il progetto cercando di visualizzare la paginaA.aspx.
Per prima cosa viene proposta la pagina del login. Inseriamo  i dati di una utenza del gruppoA. Se i dati inseriti sono corretti verremo dirottati sulla paginaA.aspx e vedremo il nostro treeview con due rami Pagina A e Pagina B.
Se proviamo a cliccare su Pagina B automaticamente ci viene riproposto il login. Questo succede perchè abbiamo usato le credenziali di un utente del gruppo A e quindi viene  impedito l’accesso ad una pagina residente nella cartella B.
Analogamente se usiamo le credenziali di un utente del gruppo B riusciremo ad accedere alla paginaB.aspx e verrà proposto invece il login quando tenteremo di accedere alla paginaA.aspx.

Ma perchè proporre sul nostro albero del menu delle pagine a cui gli utenti non possono accedere?
Per mostrare ad ogni utente quindi un menu personalizzato in funzione del proprio ruolo ecco il supporto del “security trimming“.
Modifichiamo il nostro file web.Sitemap nel seguente modo:

<?xml version=”1.0″ encoding=”utf-8″ ?>
<siteMap xmlns=”http://schemas.microsoft.com/AspNet/SiteMap-File-1.0” >
    <siteMapNode url=”” title=””  description=”” roles=”*”>
      <siteMapNode url=”~/CartellaA/PaginaA.aspx” title=”Pagina A” description=”pagina A” roles=”GruppoA”  />
      <siteMapNode url=”~/CartellaB/PaginaB.aspx” title=”Pagina B” description=”pagina B”  roles=”GruppoB”  />   
    </siteMapNode>
</siteMap>

Come potete notare abbiamo definito in ciascun nodo del nostro menu i ruoli che possono accedere al link (roles=”*” significa tutti e bisogna per forza definirlo sul nodo radice altrimenti non verrà visualizzato il TreeView nelle pagine).

Inoltre per attivare il security trimming è necessario aggiungere al file web.config dell’applicazione la seguente porzione di codice

    <siteMap defaultProvider=”XmlSiteMapProvider” enabled=”true”>
      <providers>
        <add name=”XmlSiteMapProvider”
              description=”Default SiteMap provider”
              type=”System.Web.XmlSiteMapProvider”
             siteMapFile=”Web.sitemap”
            securityTrimmingEnabled=”true” />
      </providers>
    </siteMap>
 
 all’interno del nodo <system.web></system.web>.
 
 In questo modo se accediamo nell’applicazione come utente del GruppoA vedremo nel menu solamente i link delle pagine web abilitate  per gli utenti del gruppo. Le pagine a cui non è abilitato l’accesso non verranno visualizzate.

Quante volte nel realizzare un sito utilizzando i CSS mi sono trovato ad avere diversi risultati con diversi browser?

E poi quante volte mi è rimasto il dubbio su come un’applicazione venga visualizzata in un altro sistema operativo?

Per ovviare a questo inconveniente ho sempre cercato di avere più sistemi operativi e per ciascuno di essi più browser da utilizzare semplicemente per visualizzare i siti web faticosamente costruiti e in modo da coprire la più ampia casistica possibile. Ma ovviamente questo non ha mai garantito la certezza che tutti vedano le stesse cose nello stesso modo.

Ma ora grazie a questo sito http://browsershots.org ora è possibile visualizzare la propria realizzazione in sistemi operativi e browsers diversi con un semplice click.

Testa di Ferro - Emanuele Filiberto

Testa di Ferro - Emanuele Filiberto

Lo so non si dovrebbero spingere cause in cui si è coinvolti direttamente ma le mie eccezioni sono sempre ampiamente giustificate.
E’ il caso di un ottimo libro storico (effettivamente questo libro non ha niente in comune con il lavoro ma si vive anche di passioni e dopo la programmazione la storia è la mia passione) scritto nel lontano 1981.
Il libro in questione “Testa di ferro” di Carlo Moriondo, edito da UTET, è una biografia di un personaggio di casa Savoia molto trascurato nei nostri libri di storia: Emanuele Filiberto.
A questo principe l’Italia deve tutto: dalle sue intuizioni politiche e militari è nata la storia d’Italia.
La scrittura del libro è gradevole con un ottimo taglio giornalistico (Carlo Moriondo era un cronista della Stampa), è avvincente perchè è il giusto connubio tra vicende storiche e vita romanzata: insomma un libro da leggere.
Il mio amico Giorgio Moriondo ha riproposto alle stampe il libro scritto da suo padre 28 anni dopo la sua prima pubblicazione: nonostante questo lasso di tempo il libro resta un raro e valido esempio di come la storia possa essere raccontata.

marzo: 2009
L M M G V S D
 1
2345678
9101112131415
16171819202122
23242526272829
3031