L'arte di lavorare con le WebPart - #1

"ASP.NET 2.0 fornisce classi che permettono di costruire applicazioni web integrando la tecnologia delle web parts..." si ok questo già lo conosco.

Come spesso accade, però, non sempre basta quello che mamma Microsoft rilascia per le nostre innumerevoli esigenze, così capita che ci si ritrova a dover "estendere" qualcosina.

Iniziamo a estendere, o meglio "rivedere", il Web Part Framework di ASP.NET 2.0 con un bel WebPartManager di casa nostra che si adopera per autorizzare o meno le webparts che gli si pareranno dinanzi nella pagina web. Nel codice che segue da notare AuthorizationFilter, è una proprietà che assume il nostro Custom User Control (o semplicemente uno User Control, di cosa possiamo trasformare in Web Part se ne parlerà in un prossimo post) ereditando da System.Web.UI.WebControls.WebParts.WebPart e permette di specificare, passando una stringa (es. "Administrators, Users, PowerUsers,..."), quali ruoli hanno l'autorità di visualizzare la Web Part in una pagina.

Facile, quindi, verificare il ruoli abilitati in associazione con l'utente corrente

string[] roles = e.AuthorizationFilter.Split(new char[] { ',' });
if (roles.Length > 0)
{
    
if (Roles.Enabled)
        isAuthorized = 
this.RolesManagerIsUserInRoles(roles);
    
else
        
isAuthorized = this.ContextIsUserInRoles(roles);
}               

ed ecco il listato completo

public class WebPartManager : System.Web.UI.WebControls.WebParts.WebPartManager
    {        
        
public WebPartManager() { }        

        
protected override void OnAuthorizeWebPart(WebPartAuthorizationEventArgs e)
        {
            
bool isAuthorized = false;

            
if (string.IsNullOrEmpty(e.AuthorizationFilter) || e.AuthorizationFilter == "*")
            {
                isAuthorized = 
true;
            }
            
else
            
{
                
string[] roles = e.AuthorizationFilter.Split(new char[] { ',' });
                
if (roles.Length > 0)
                {
                    
if (Roles.Enabled)
                        isAuthorized = 
this.RolesManagerIsUserInRoles(roles);
                    
else
                        
isAuthorized = this.ContextIsUserInRoles(roles);
                }                
            }
            e.IsAuthorized = isAuthorized;            
        }
        
        
private bool RolesManagerIsUserInRoles(string[] roles)
        {
            
for (int i = 0; i < roles.Length; i++)
            {
                
if (Roles.IsUserInRole(roles[i]))
                    
return true;
            }
            
return false;
        }
        
        
private bool ContextIsUserInRoles(string[] roles)
        {
            
for (int i = 0; i < roles.Length; i++)
            {
                
if( (Context != null) && (Context.User != null))
                    
if (Context.User.IsInRole(roles[i]))
                        
return true;
            }
            
return false;
        }
    }

 

al prossimo post, in cui rivediamo qualcos'altro.

 

powered by IMHO 1.3

«luglio»
domlunmarmergiovensab
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345