diff --git a/src/Microsoft.AspNet.Authorization/AuthorizationHandler.cs b/src/Microsoft.AspNet.Authorization/AuthorizationHandler.cs index 84e0160fee..bdfe8b1c13 100644 --- a/src/Microsoft.AspNet.Authorization/AuthorizationHandler.cs +++ b/src/Microsoft.AspNet.Authorization/AuthorizationHandler.cs @@ -35,7 +35,6 @@ namespace Microsoft.AspNet.Authorization } public abstract class AuthorizationHandler : IAuthorizationHandler - where TResource : class where TRequirement : IAuthorizationRequirement { public virtual async Task HandleAsync(AuthorizationContext context) @@ -57,13 +56,11 @@ namespace Microsoft.AspNet.Authorization public virtual void Handle(AuthorizationContext context) { - var resource = context.Resource as TResource; - // REVIEW: should we allow null resources? - if (resource != null) + if (context.Resource is TResource) { foreach (var req in context.Requirements.OfType()) { - Handle(context, req, resource); + Handle(context, req, (TResource)context.Resource); } } } diff --git a/test/Microsoft.AspNet.Authorization.Test/DefaultAuthorizationServiceTests.cs b/test/Microsoft.AspNet.Authorization.Test/DefaultAuthorizationServiceTests.cs index 63f1168991..f2b28f6aba 100644 --- a/test/Microsoft.AspNet.Authorization.Test/DefaultAuthorizationServiceTests.cs +++ b/test/Microsoft.AspNet.Authorization.Test/DefaultAuthorizationServiceTests.cs @@ -817,6 +817,39 @@ namespace Microsoft.AspNet.Authorization.Test } } + public class EvenHandler : AuthorizationHandler + { + protected override void Handle(AuthorizationContext context, OperationAuthorizationRequirement requirement, int id) + { + if (id % 2 == 0) + { + context.Succeed(requirement); + } + } + } + + [Fact] + public async Task CanUseValueTypeResource() + { + // Arrange + var authorizationService = BuildAuthorizationService(services => + { + services.AddTransient(); + }); + var user = new ClaimsPrincipal( + new ClaimsIdentity( + new Claim[] { + }, + "AuthType") + ); + + // Act + // Assert + Assert.False(await authorizationService.AuthorizeAsync(user, 1, Operations.Edit)); + Assert.True(await authorizationService.AuthorizeAsync(user, 2, Operations.Edit)); + } + + [Fact] public async Task DoesNotCallHandlerWithWrongResourceType() {