Dev2.Common.Utilities.PerformActionInsideImpersonatedContext C# (CSharp) Method

PerformActionInsideImpersonatedContext() public static method

public static PerformActionInsideImpersonatedContext ( IPrincipal userPrinciple, System.Action actionToBePerformed ) : void
userPrinciple IPrincipal
actionToBePerformed System.Action
return void
        public static void PerformActionInsideImpersonatedContext(IPrincipal userPrinciple, Action actionToBePerformed)
        {
            if(userPrinciple == null)
            {
                actionToBePerformed();
            }
            else
            {
                WindowsIdentity identity = userPrinciple.Identity as WindowsIdentity;
                WindowsImpersonationContext impersonationContext = null;
                if(identity != null)
                {
                    if(identity.IsAnonymous)
                    {
                        identity = ServerUser.Identity as WindowsIdentity;
                    }
                    if(identity != null)
                    {
                        impersonationContext = identity.Impersonate();
                    }
                }
                try
                {
                    actionToBePerformed();
                }
                catch(Exception)
                {
                    if(impersonationContext != null)
                    {
                        impersonationContext.Undo();
                    }
                    identity = ServerUser.Identity as WindowsIdentity;
                    if(identity != null)
                    {
                        impersonationContext = identity.Impersonate();
                    }
                    try
                    {
                        actionToBePerformed();
                    }
                    catch(Exception)
                    {
                        //Ignore
                    }
                }
                finally
                {
                    if(impersonationContext != null)
                    {
                        impersonationContext.Undo();
                    }
                }
            }
        }