Here's the basic idea. You should play with this to get the desired results - especially when some actions inside controller need authorization, some - not.
As you know, each and every part of asp.net mvc framework can be customized. So is filter providing mechanism of it. First, create the IFilterProvider implementation for providing authorization filters
public class AuthorizeFilterProvider : IFilterProvider
{
public List<Type> AuthorizationExcludedControllerTypes = new List<Type>();
#region IFilterProvider Members
public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
if (!AuthorizationExcludedControllerTypes.Contains(controllerContext.Controller.GetType()))
{
yield return new Filter(new AuthorizeAttribute(), FilterScope.Controller, null);
//return filter only if it is not included into AuthorizationExcludedControllerTypes list.
}
}
#endregion
}
And register filter provider into Global.asax
protected void Application_Start()
{
...
AuthorizeFilterProvider authorizeFilterProvider = new AuthorizeFilterProvider();
authorizeFilterProvider.AuthorizationExcludedControllerTypes.Add(typeof(HomeController));
FilterProviders.Providers.Add(authorizeFilterProvider );
...
}