From 457016a6daf89c8b7994207cf3c2875e75425965 Mon Sep 17 00:00:00 2001 From: Yishai Galatzer Date: Mon, 3 Mar 2014 02:24:52 -0800 Subject: [PATCH] Add the actual filters interface signatures, Add the AuthorizationFilterAttribute --- samples/MvcSample/FiltersController.cs | 16 ++++++++++++++-- .../Filters/AuthorizationFilterAttribute.cs | 13 +++++++++++++ .../Filters/IActionFilter.cs | 8 ++++++++ .../Filters/IActionResultFilter.cs | 8 ++++++++ .../Filters/IAuthorizationFilter.cs | 8 ++++++++ .../Filters/IExceptionFilter.cs | 8 ++++++++ .../Filters/IFilterOfTContext.cs | 10 ++++++++++ 7 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 src/Microsoft.AspNet.Mvc.Core/Filters/AuthorizationFilterAttribute.cs create mode 100644 src/Microsoft.AspNet.Mvc.Core/Filters/IActionFilter.cs create mode 100644 src/Microsoft.AspNet.Mvc.Core/Filters/IActionResultFilter.cs create mode 100644 src/Microsoft.AspNet.Mvc.Core/Filters/IAuthorizationFilter.cs create mode 100644 src/Microsoft.AspNet.Mvc.Core/Filters/IExceptionFilter.cs create mode 100644 src/Microsoft.AspNet.Mvc.Core/Filters/IFilterOfTContext.cs diff --git a/samples/MvcSample/FiltersController.cs b/samples/MvcSample/FiltersController.cs index 60a408574b..909acb000c 100644 --- a/samples/MvcSample/FiltersController.cs +++ b/samples/MvcSample/FiltersController.cs @@ -1,4 +1,6 @@ -using Microsoft.AspNet.Mvc; +using System; +using System.Threading.Tasks; +using Microsoft.AspNet.Mvc; using MvcSample.Models; namespace MvcSample @@ -7,6 +9,8 @@ namespace MvcSample // TODO: Add a real filter here [ServiceFilter(typeof(object), Order = 1)] [ServiceFilter(typeof(string))] + [PassThrough(Order = 0)] + [PassThrough(Order = 2)] public class FiltersController : Controller { private readonly User _user = new User() { Name = "User Name", Address = "Home Address" }; @@ -18,4 +22,12 @@ namespace MvcSample return View("MyView", _user); } } -} + + public class PassThroughAttribute : AuthorizationFilterAttribute + { + public async override Task Invoke(AuthorizationFilterContext context, Func next) + { + await next(context); + } + } +} \ No newline at end of file diff --git a/src/Microsoft.AspNet.Mvc.Core/Filters/AuthorizationFilterAttribute.cs b/src/Microsoft.AspNet.Mvc.Core/Filters/AuthorizationFilterAttribute.cs new file mode 100644 index 0000000000..c17dafbe44 --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.Core/Filters/AuthorizationFilterAttribute.cs @@ -0,0 +1,13 @@ +using System; +using System.Threading.Tasks; + +namespace Microsoft.AspNet.Mvc +{ + [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] + public abstract class AuthorizationFilterAttribute : Attribute, IFilter, IAuthorizationFilter + { + public abstract Task Invoke(AuthorizationFilterContext context, Func next); + + public int Order { get; set; } + } +} diff --git a/src/Microsoft.AspNet.Mvc.Core/Filters/IActionFilter.cs b/src/Microsoft.AspNet.Mvc.Core/Filters/IActionFilter.cs new file mode 100644 index 0000000000..dee1e6d057 --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.Core/Filters/IActionFilter.cs @@ -0,0 +1,8 @@ +using Microsoft.AspNet.Mvc.Filters; + +namespace Microsoft.AspNet.Mvc +{ + public interface IActionFilter : IFilter + { + } +} diff --git a/src/Microsoft.AspNet.Mvc.Core/Filters/IActionResultFilter.cs b/src/Microsoft.AspNet.Mvc.Core/Filters/IActionResultFilter.cs new file mode 100644 index 0000000000..0ed3d78c4c --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.Core/Filters/IActionResultFilter.cs @@ -0,0 +1,8 @@ +using Microsoft.AspNet.Mvc.Filters; + +namespace Microsoft.AspNet.Mvc +{ + public interface IActionResultFilter : IFilter + { + } +} diff --git a/src/Microsoft.AspNet.Mvc.Core/Filters/IAuthorizationFilter.cs b/src/Microsoft.AspNet.Mvc.Core/Filters/IAuthorizationFilter.cs new file mode 100644 index 0000000000..d5d44b4b8e --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.Core/Filters/IAuthorizationFilter.cs @@ -0,0 +1,8 @@ +using Microsoft.AspNet.Mvc.Filters; + +namespace Microsoft.AspNet.Mvc +{ + public interface IAuthorizationFilter : IFilter + { + } +} diff --git a/src/Microsoft.AspNet.Mvc.Core/Filters/IExceptionFilter.cs b/src/Microsoft.AspNet.Mvc.Core/Filters/IExceptionFilter.cs new file mode 100644 index 0000000000..9259deccd9 --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.Core/Filters/IExceptionFilter.cs @@ -0,0 +1,8 @@ +using Microsoft.AspNet.Mvc.Filters; + +namespace Microsoft.AspNet.Mvc +{ + public interface IExceptionFilter : IFilter + { + } +} diff --git a/src/Microsoft.AspNet.Mvc.Core/Filters/IFilterOfTContext.cs b/src/Microsoft.AspNet.Mvc.Core/Filters/IFilterOfTContext.cs new file mode 100644 index 0000000000..962c11177f --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.Core/Filters/IFilterOfTContext.cs @@ -0,0 +1,10 @@ +using System; +using System.Threading.Tasks; + +namespace Microsoft.AspNet.Mvc.Filters +{ + public interface IFilter + { + Task Invoke(T context, Func next); + } +}