OK, I got the claims! Now what? Una semplice ricetta per creare una claim dependant web part

Avete letto il precedente post relativo alla visualizzazione dei claim e avete visto come fare ad ottenere l'elenco di tutti i claim associati all'utente corrente e avete visto come sono strutturati. Come naturale proseguimento di questa attività, vediamo ora come è possibile utilizzare questi claim per realizzare delle Web Part che sfruttino i claim associati ad un utente per "pilotare" il proprio contenuto e/o comportamento.

Di seguito vi mostro del semplice codice che sfrutta la presenza di un claim "iniettato" dal'STS locale della Farm Sharepoint, seguendo il procedimento noto come "claim augmentation". L'STS locale inietta un claim di tipo https://schemas.contoso.local/claims/soccerteams" , il cui valore dipende dallo username dell'utente attualmente collegato. Alcuni valori di questo claim sono in questo caso ad esempio "Team IT 1", "Team FR 2" e così via. La descrizione di come effettuare la claim augmentation esula dallo scopo del presente articolo, e verrà trattata da appositi articoli, se interessati.

Ecco di seguito come può essere sfruttato il valore di questo claim per presentare all'utente un contenuto dipendente dal valore stesso del claim ( in questo caso viene proposto uno sconto sull'acquisto dei biglietti delle partite relative alla squadra di appartenenza dell'utente corrente es. Team IT 1, Team FR 2, etc. )

- La procedura di creazione della web part è del tutto simile  a quella vista nel post "Show me the claims!" e pertanto verrà per brevità omessa. Ci concentriamo solo sul codice di esempio, relativo al metodo "Page_Load". La web part è composta da un solo controllo "Label".

protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                IClaimsPrincipal cp = Page.User as IClaimsPrincipal;
                IClaimsIdentity ci = cp.Identity as IClaimsIdentity;

                bool found = false;
                foreach (Claim cl in ci.Claims)
                {
                    if (cl.ClaimType == "https://schemas.contoso.local/claims/soccerteams")
                    {
                       
                        if (cl.Value.ToLower().Contains(" it "))
                        {
                            found = true;
                            Label1.Text = "30% discounted tickets for next match of " + cl.Value;
                        }
                        else if (cl.Value.ToLower().Contains(" fr "))
                        {
                            found = true;
                            Label1.Text = "15% discounted tickets for next match of " + cl.Value;
                        }
                        else if (cl.Value.ToLower().Contains(" de "))
                        {
                            found = true;
                            Label1.Text = "5% discounted tickets for next match of " + cl.Value;
                        }
                    }
                }              
                if( !found )
                {
                    Label1.Text = "No discounted tickets for your team";(
                }
            }
            catch
            { 
           // my exception handling code goes here

            } 

}

Come potete notare, essendo questo solo un articolo dimostrativo, molti valori sono hard-coded. Ma le potenzialità di utilizzo di questo approccio sono davvero interessanti. E' infatti possibile recuperare i valori dei claim da un proprio database o altri claim store, e la logica business della claim dependent web part può essere complicata a piacere, anzichè essere costituita da un semplice blocco if, else if. In sostanza, la combinazione claim augmentation (offerta da un custom claim provider ) e di claim dependant web part, è estremamente potente e si offre agli sviluppi e agli utilizzi più disparati.

 

 

NOTA BENE :

Il codice e la procedura mostrata sono a solo scopo illustrativo, e devono essere considerati come una semplcie "guida" allo sviluppo. In nessun modo vanno considerati come completi e corretti.

Si declina ogni responsabilità per l'uso e per gli effeti dell'uso del codice qui mostrato.