Optionally Running SPSecurity.RunWithElevatedPrivileges with Delgates
- by Damon Armstrong
I was writing some SharePoint code today where I needed to give people the option of running some code with elevated permission. When you run code in an elevated fashion it normally looks like this: SPSecurity.RunWithElevatedPrivileges(()=> { //Code to run }); It wasn’t a lot of code so I was initially inclined to do something horrible like this: public void SomeMethod(bool runElevated) { if(runElevated) { SPSecurity.RunWithElevatedPrivileges(()=> { //Code to run }); } else { //Copy of code to run } } Easy enough, but I did not want to draw the ire of my coworkers for employing the CTRL+C CTRL+V design pattern. Extracting the code into a whole new method would have been overkill because it was a pretty brief piece of code. But then I thought, hey, wait, I’m basically just running a delegate, so why not define the delegate once and run it either in an elevated context or stand alone, which resulted in this version which I think is much cleaner because the code is only defined once and it didn’t require a bunch of extra lines of code to define a method: public void SomeMethod(bool runElevated) { var code = new SPSecurity.CodeToRunElevated(()=> { //Code to run }); if(runElevated) { SPSecurity.RunWithElevatedPermissions(code); } else { Code(); } }