I was wrong... it doesn't work fine if I make a default, empty constructor. Only the default constructor gets called, so whatever I return for that default case is what always gets returned.
Here's the sample attribute I made to test in an empty project:
As you can see, it's designed to fail if the default constructor is called. If, however, the "normal" constructor is called with "asdf" it will return True.
And here's how I decorated the Home -> About action in a completely empty, default MVC project:
The Telerik Menu I placed on the page never shows the "About" menu item. If I set breakpoints, the default constructor is the only one that gets called (ever). Yes if I type in the url http://localhost/Home/About, the page renders fine.
I've tested my real website similarly and I get exactly the same results. I have even checked that if I'm logged in under a user that shouldn't get to some pages I can type in the URL manually and I get kicked to the login page, but if I'm logged in under a user that can get to any page then typing in the URL works fine.
Let me know if you want my copy of this test project, however, all my changes are in the code blocks above.
Thanks,
Patrick