SharePoint 2007 - Security Trimmed Control

Nel realizzare le nostre pagine SharePoint (o le nostre Web Part), alle volte nasce l’esigenza di legare la visibilità di alcuni componenti della pagina, ai permessi che l’utente connesso possiede; un po’ quello che è il comportamento dei componenti standard di SharePoint.

Rendere il nostro controllo “SecurityTrimmed” non è particolarmente complesso, in quanto possiamo utilizzare la classe SPSecurityTrimmedControl messa a disposizione da SharePoint.

<Sharepoint:SPSecurityTrimmedControl runat="server" Permissions="ManageLists">
Inserisci qui I tuoi controlli….
</SharePoint:SPSecurityTrimmedControl>

 

La proprietà Permissions ci permette di specificare quali sono i permessi che l’utente deve possedere per visualizzare tutto quello che è stato inserito all’interno del controllo; possiamo chiaramente utilizzare tutto il set di permissions messo a disposizione da SharePoint.

Technorati Tags:

Visual Studio 2010 - Tools for SharePoint

Direttamente dal blog del team di SharePoint, una buona notizia per tutti gli sviluppatori SharePoint.

Technorati Tags: ,

[OT] Blog e Leggi in Italia

Solo per fare una citazione: .... a volte ritornano!

Un DdL che sta passando inosservato ed a cui bisogna invece prestare attenzione!!!

Visual Studio 2010

Cominciano ad uscire le notizie sulla nuova versione di Visual Studio. Per i curiosi qui è presente una overview del prodotto.

Technorati Tags:

[OT] - Senza Parole

La storia di questo bambino lascia veramente senza parole. Consiglio tutti di leggerla attentamente e riflettere.

SharePoint 2007 - CSS Reference Chart

Per tutti coloro che debbono realizzare delle personalizzazioni sul layout grafico di SharePoint, un post assolutamente da non perdere: CSS Reference Chart 

Technorati Tags:

SharePoint Conference 2008

Iscrizione effettuata!!!

Debbo dire che le sessioni proposte sono veramente interessati ed alle volte è difficile scegliere la sessione da seguire..... (un po' di pubblicità non guasta mai).

Chi ci sarà?

Technorati Tags:

SiteLogoUrl e Search Center with Tab

Ultimamente mi sono dedicato alla creazione di una "site definition" in SharePoint. A causa di questa attività mi sono scontrato con uno strano comportamento del template "Search Center with Tab".

A differenza di tutti gli altri template, quando il sito viene creato, viene valorizzata la URL del logo che viene fatta poi puntare al logo standard (/_layouts/images/titlegraphic.gif) che viene visualizzato anche lasciando questo campo vuoto (quindi perché scriverlo?).

Il bello è che, se proviamo a sovrascrivere questo valore con l'attributo SiteLogoUrl all'interno del file ONET.XML, viene comunque impostato il logo di default.

Probabilmente una feature attivata in questa tipologia di sito, effettua una sovrascrittura di questo campo ... ma se è così, cosa aveva in testa il programmatore che ha scritto quel codice????

 

Technorati Tags:

SharePoint 2007 - Approvazione di un Folder

Se la nostra document library prevede l’approvazione del contenuto, è abbastanza semplice scrivere del codice che effettui l’approvazione dei file presenti (Ẻ sufficiente utilizzare il metodo Approve della classe SPFile). Se tuttavia il nostro codice deve effettuare l’approvazione di un folder, non abbiamo a disposizione il metodo Approve e per ottenere il risultato dovremo agire sulla proprietà SPModerationInformation.
 
using (SPSite site = new SPSite("http://miosito"))
{
      using (SPWeb web = site.OpenWeb())
      {
            SPFolder folder = web.GetFolder("http://miosito/dl/folder");
            SPModerationInformation modInfo = folder.Item.ModerationInformation;
            if (modInfo.Status == SPModerationStatusType.Pending)
            {
                  modInfo.Status = SPModerationStatusType.Approved;
                  folder.Item.Update();
            }
      }
}
 
 
Technorati Tags: SharePoint

SharePoint 2007 - Modificare i privilegi di un item da una WebPart

Ho già parlato di come sia possibile modificare i diritti d’accesso ad ogni singolo item e di come sia possibile fare eseguire del codice con diritti di accesso più elevati di quelli che normalmente avrebbe l’utente connesso sugli oggetti interessati.

Se abbiamo la necessità, tramite una WebPart di modificare i diritti di accesso ad un item (presupponendo che il nostro utente non abbia l’autorizzazione a farlo) e proviamo a mettere insieme le due cose il codice potrebbe assomigliare a questo:

 

SPSite site = SPControl.GetContextWeb(this.Context).Site;

SPWeb web = SPControl.GetContextWeb(this.Context);

SPUser curUser = web.AllUsers[System.Security.Principal.WindowsIdentity.GetCurrent().Name];

SPSecurity.RunWithElevatedPrivileges(delegate()

{

      using (SPSite elevatedSite = new SPSite(site.ID))

      {

            using (SPWeb elevatedWeb = elevatedSite.OpenWeb(web.ID))

            {

                  if (elevatedWeb != null)

                  {

                        elevatedSite.AllowUnsafeUpdates = true;

                        elevatedWeb.AllowUnsafeUpdates = true;

 

                        SPListItem item = elevatedWeb.GetListItem("http://sito/docs/item");

 

                        // Verifica la permission inheritance, e se necessario la interrompe

                        if (!item.HasUniqueRoleAssignments)

                        item.BreakRoleInheritance(true);

 

                        for (int idx = item.RoleAssignments.Count – 1; idx >= 0; idx--)

                        {

                              item.RoleAssignments.Remove(item.RoleAssignments[idx].Member);

                        }

                  }

            }

      }

});

 

 

Un po’ a sorpresa il risultato sarebbe quello di produrre un’eccezione del tipo “the security validation for this page is invalid. Click Back in your web browser, refresh the page, and try your operation again”.

 

Non so bene se si tratti di un bug o di un comportamento voluto, ma tutto dipende dal fatto che il metodo BreakRoleInheritance effettua un reset del flag AllowUnsafeUpdates che assume nuovamente il valore false e ci impedisce quindi di effettuare altre modifiche ai permessi del nostro item.

Per far funzionare il codice è quindi necessario impostare di nuovo il flag AllowUnsafeUpdates dopo la chiamata al metodo BreakRoleInheritance:

 

// Verifica la permission inheritance, e se necessario la interrompe

if (!item.HasUniqueRoleAssignments)

{

item.BreakRoleInheritance(true);

      elevatedWeb.AllowUnsafeUpdates = true;

}

 

La soluzione del problema è abbastanza semplice, tuttavia il comportamento del metodo BreakRoleInheritance mi sembra molto strano … io penso si tratti di un bug; chi non è d’accordo alzi la mano!

 

 

Technorati Tags: SharePoint