mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Adding IAuthorizationFilter support for WebApi
This commit is contained in:
@@ -158,6 +158,7 @@ namespace Orchard.Environment {
|
||||
|
||||
GlobalConfiguration.Configuration.Filters.Add(new OrchardApiActionFilterDispatcher());
|
||||
GlobalConfiguration.Configuration.Filters.Add(new OrchardApiExceptionFilterDispatcher());
|
||||
GlobalConfiguration.Configuration.Filters.Add(new OrchardApiAuthorizationFilterDispatcher());
|
||||
|
||||
ViewEngines.Engines.Clear();
|
||||
ViewEngines.Engines.Add(new ThemeAwareViewEngineShim());
|
||||
|
@@ -604,6 +604,7 @@
|
||||
<Compile Include="WebApi\DefaultOrchardWebApiHttpControllerSelector.cs" />
|
||||
<Compile Include="WebApi\DefaultOrchardWebApiHttpHttpControllerActivator.cs" />
|
||||
<Compile Include="WebApi\Extensions\RouteExtension.cs" />
|
||||
<Compile Include="WebApi\Filters\OrchardApiAuthorizationFilterDispatcher.cs" />
|
||||
<Compile Include="WebApi\Filters\UnhandledApiExceptionFilter.cs" />
|
||||
<Compile Include="WebApi\Filters\IFilterProvider.cs" />
|
||||
<Compile Include="WebApi\Filters\OrchardApiExceptionFilterDispatcher.cs" />
|
||||
|
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web.Http.Controllers;
|
||||
using System.Web.Http.Filters;
|
||||
|
||||
namespace Orchard.WebApi.Filters {
|
||||
public class OrchardApiAuthorizationFilterDispatcher : IAuthorizationFilter {
|
||||
public bool AllowMultiple { get; private set; }
|
||||
public async Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation) {
|
||||
var workContext = actionContext.ControllerContext.GetWorkContext();
|
||||
|
||||
foreach (var actionFilter in workContext.Resolve<IEnumerable<IApiFilterProvider>>().OfType<IAuthorizationFilter>()) {
|
||||
continuation = () => actionFilter.ExecuteAuthorizationFilterAsync(actionContext, cancellationToken, continuation);
|
||||
}
|
||||
|
||||
return await continuation();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user