diff --git a/.gitignore b/.gitignore index 40725ad4..d4dd00a6 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,7 @@ _ReSharper*/ [Tt]est[Rr]esult* NCover*.lic *.*.dotCover -*.DotSettings \ No newline at end of file +*.DotSettings + +#SharpDevelop files +*.sdsettings \ No newline at end of file diff --git a/FluentSecurity.Specification/ConfigurationExpressionSpec.cs b/FluentSecurity.Specification/ConfigurationExpressionSpec.cs index aa9c41b2..cdb2da06 100644 --- a/FluentSecurity.Specification/ConfigurationExpressionSpec.cs +++ b/FluentSecurity.Specification/ConfigurationExpressionSpec.cs @@ -368,6 +368,36 @@ public void Should_have_6_policycontainers() } } + [TestFixture] + [Category("ConfigurationExpressionSpec")] + public class When_adding_a_conventionpolicycontainter_for_controller_with_nonaction_actions + { + [Test] + public void Should_not_have_policycontainer_for_actions_marked_as_NonAction() + { + // Arrange + var configurationExpression = new RootConfiguration(); + configurationExpression.GetAuthenticationStatusFrom(StaticHelper.IsAuthenticatedReturnsFalse); + + // Act + configurationExpression.For(); + + // Assert + var policyContainers = configurationExpression.Runtime.PolicyContainers; + + Assert.That(configurationExpression.Runtime.PolicyContainers.Count(), Is.EqualTo(0)); + } + + private class NonActionController : Controller + { + [NonAction] + public ActionResult SomeAction() + { + return null; + } + } + } + [TestFixture] [Category("ConfigurationExpressionSpec")] public class When_adding_a_conventionpolicycontainter_for_controller_with_aliased_action diff --git a/FluentSecurity/Extensions.cs b/FluentSecurity/Extensions.cs index 4f46fd14..a1a945c1 100644 --- a/FluentSecurity/Extensions.cs +++ b/FluentSecurity/Extensions.cs @@ -92,7 +92,18 @@ internal static bool IsValidActionMethod(this MethodInfo methodInfo) return methodInfo.ReturnType.IsControllerActionReturnType() && !methodInfo.IsSpecialName && - !methodInfo.IsDeclaredBy(); + !methodInfo.IsDeclaredBy() && + !methodInfo.HasAttribute(); + } + + /// + /// Returns true if the passed method has the attribute of type TAttribute + /// + /// MethodInfo of the method to verify + /// + internal static bool HasAttribute(this MethodInfo methodInfo) where TAttribute:Attribute + { + return methodInfo.GetCustomAttributes(typeof(TAttribute), false).Any(); } ///