This one got me good… real good… I couldn’t find any documented fixes for this issue so here it goes!

Scenario
You have a SharePoint 2010 farm that was migrated from SharePoint 2007. You have end users that would like to use SharePoint Designer to create some workflows but when trying to access the site they get the error message that says “This web site has been configured to disallow editing with SharePoint Designer.”

SharePoint Designer Not Allowed

You’re thinking to yourself, this is easy cheesy. So you go to Central Administration and turn on/enable SharePoint Designer. But wait… it’s already enabled… OK, let’s go check the Site Collection settings. Oh shoot, those are all enabled too… You try to open another site in the same Site Collection with SharePoint Designer and that works! But it’s not the one you want… You sit there scratching your head for 21.3 seconds and then decide to do some googling and here you are. :)

Root Cause
As briefly alluded to earlier, this is most likely a result of a SharePoint 2007 to SharePoint 2010 migration in which the SharePoint 2007 sites had blocked SharePoint Designer access by editing the site templates’ ONET.xml files. During the migration, you had forgotten about this tweak and the settings made aren’t transferred to the new servers (at least not for the XML definition files anyways). But unbeknownst to you, this change caused some entries to be made in the SPWeb’s property bag that did come along for the ride. Dun, dun, dun….

Solution
Thanks to a hint from Ethand from the SharePoint forums we can fix this issue with some nifty PowerShell. If you’re a SharePoint Manager fan, you can validate that the offending property exists by navigating to the properties node of the SPWeb and then finding the property name “vti_disablewebdesignfeatures2″.

vti_disablewebdesignfeatures2

As expected, this property has a value of “wdfopensite” which is the trigger to not allow SharePoint Designer to connect to this site. I was hoping to be able to modify this value via SharePoint Manager, but it looked like a read-only property here so let’s shuffle our way over to PowerShell to do some real damage…er, I mean some problem resolution.

PowerShell

$web = get-spweb "http://URLToYourOffendingWebSite"
$web.allproperties["vti_disablewebdesignfeatures2"] = ""
$web.update()

After the update, you can validate by either calling the property again in PowerShell or viewing it in SharePoint Manager to confirm that the property now contains an empty value. Go back to SharePoint Designer (you may need to close it and re-open) and ta da! You’re back in business and all is well again.