maandag 27 december 2010

Linq to SharePoint werkt niet OOB met Anonymous Access

Voor een project hebben we gebruik gemaakt van een techniek genaamd SPMetal. Deze techniek gaat op basis van aanwezige metadata (sitekolommen en contenttypes) een datamodel genereren in c# wat het mogelijk maakt een data strongly typed uit SharePoint te halen. SPMetal genereert dus het datamodel, maar daadwerkelijk de data uit SP halen word door Linq to SharePoint gedaan.

Gisteren gingen we aan de slag om een custom Forms Based Authentication oplossing te testen en zetten daarmee de site op anonymous. Poef… niks werkte meer. Al onze data-retrieval ging via Linq to SharePoint en toen dat onderuit ging werkte niks meer en kregen we overal een 401 – not authorised. En dat klopt. Een anonieme gebruiker mag geen dynamische queries uitvoeren tegen een sql database. Elevated Priveleges dan maar… werkte ook niet!? In de InnerWorkings gebruikt Linq to SQL namelijk SPContext.Current. Dan kan je er wel een elevated web omheen wrappen maar dat gaat het toch niet worden.

ResharperLinqSharePoint

Nee, wat er moest gebeuren, is dat tijdens het daadwerkelijk uitvoeren van de query, de HttpContext geback-upped moest worden in een variabele, de originele context op Null gezet moest worden, opdat we de code uit konden voeren in elevated mode waarna de originele context weer terug gezet kon worden.


image 

Wanneer nu data opgehaal gaat worden word het uitgevoerd via deze methode. Denk hieraan wanneer je een anonieme website gaat maken!

Bron: Link naar bron

Geen opmerkingen: