Tempo fa, avevo parlato riguardo l'utilità del metodo RunWithElevatedPrivileges della classe SPSecurity.
Beh, mi sbagliavo proprio... E' utile si, ma ... QUANDO FUNZIONA !!
Esatto, perchè questa tecnica non funziona sempre in tutti i contesti. L'ho provato sia nello sviluppo di event handler, che in web part, che in user control caricati attraverso la SmartPart. Ma ci sono proprio delle volte, in cui non vuol proprio fuzionare...

Vi consiglio allora, una serie di cinque post dedicati all'impersonation su Sharepoint Services 3.0:
Part 1: http://dotnetjunkies.com/WebLog/victorv/archive/2005/04/20/69524.aspx
Part 2: http://dotnetjunkies.com/WebLog/victorv/archive/2005/04/20/69519.aspx
Part 3: http://dotnetjunkies.com/WebLog/victorv/archive/2005/04/20/69521.aspx
Part 4: http://dotnetjunkies.com/WebLog/victorv/archive/2005/06/30/128887.aspx
Part 5: http://dotnetjunkies.com/WebLog/victorv/archive/2005/06/30/128890.aspx

Questi vi assicuro che funzionano !
Uno dei metodi più carini, è quello descritto nella parte 5. E' stata creata una classe che eridata di IDisposable, in modo tale da poterla utilizzarle all'interno della direttiva using, e altra cosa carina è che prende le credenziali direttamente dall'Application Pool di IIS, senza quindi doverle mettere a mano.
Questo poi l'utilizzo:

using(Identity impersonate = Identity.ImpersonateAdmin())

{
// ... Operazioni di admin, eseguite con l'utenza dell'Application Pool }

Proprio bello !