Browse Source

Remove IAuthorizationEnabled. Auth and feature refactor.

pull/859/head
Halil ibrahim Kalkan 8 years ago
parent
commit
e5d1d8f623
  1. 26
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptorRegistrar.cs
  2. 7
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/IAuthorizationEnabled.cs
  3. 25
      framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/MethodInvocationAuthorizationService.cs
  4. 1
      framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/AbpDddApplicationModule.cs
  5. 1
      framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs
  6. 8
      framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs
  7. 4
      framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptorRegistrar.cs
  8. 24
      framework/src/Volo.Abp.Features/Volo/Abp/Features/MethodInvocationFeatureCheckerService.cs

26
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/AuthorizationInterceptorRegistrar.cs

@ -1,4 +1,8 @@
using Volo.Abp.DependencyInjection;
using System;
using System.Linq;
using System.Reflection;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Authorization
{
@ -6,10 +10,28 @@ namespace Volo.Abp.Authorization
{
public static void RegisterIfNeeded(IOnServiceRegistredContext context)
{
if (typeof(IAuthorizationEnabled).IsAssignableFrom(context.ImplementationType))
if (ShouldIntercept(context.ImplementationType))
{
context.Interceptors.TryAdd<AuthorizationInterceptor>();
}
}
private static bool ShouldIntercept(Type type)
{
return type.IsDefined(typeof(AuthorizeAttribute), true) ||
AnyMethodHasAuthorizeAttribute(type);
}
private static bool AnyMethodHasAuthorizeAttribute(Type implementationType)
{
return implementationType
.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
.Any(HasAuthorizeAttribute);
}
private static bool HasAuthorizeAttribute(MemberInfo methodInfo)
{
return methodInfo.IsDefined(typeof(AuthorizeAttribute), true);
}
}
}

7
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/IAuthorizationEnabled.cs

@ -1,7 +0,0 @@
namespace Volo.Abp.Authorization
{
public interface IAuthorizationEnabled
{
}
}

25
framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/MethodInvocationAuthorizationService.cs

@ -1,4 +1,6 @@
using System.Linq;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Clients;
@ -30,8 +32,7 @@ namespace Volo.Abp.Authorization
return;
}
var authorizationAttributes = GetAuthorizationDataAttributes(context);
foreach (var authorizationAttribute in authorizationAttributes)
foreach (var authorizationAttribute in GetAuthorizationDataAttributes(context.Method))
{
await CheckAsync(authorizationAttribute);
}
@ -42,17 +43,23 @@ namespace Volo.Abp.Authorization
return context.Method.GetCustomAttributes(true).OfType<IAllowAnonymous>().Any();
}
protected virtual IAuthorizeData[] GetAuthorizationDataAttributes(MethodInvocationAuthorizationContext context)
protected virtual IEnumerable<IAuthorizeData> GetAuthorizationDataAttributes(MethodInfo methodInfo)
{
var classAttributes = context.Method.DeclaringType
var attributes = methodInfo
.GetCustomAttributes(true)
.OfType<IAuthorizeData>();
var methodAttributes = context.Method
.GetCustomAttributes(true)
.OfType<IAuthorizeData>();
if (methodInfo.IsPublic)
{
attributes = attributes
.Union(
methodInfo.DeclaringType
.GetCustomAttributes(true)
.OfType<IAuthorizeData>()
);
}
return classAttributes.Union(methodAttributes).ToArray();
return attributes;
}
protected async Task CheckAsync(IAuthorizeData authorizationAttribute)

1
framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/AbpDddApplicationModule.cs

@ -33,7 +33,6 @@ namespace Volo.Abp.Application
options.IgnoredInterfaces.AddIfNotContains(typeof(IRemoteService));
options.IgnoredInterfaces.AddIfNotContains(typeof(IApplicationService));
options.IgnoredInterfaces.AddIfNotContains(typeof(IUnitOfWorkEnabled));
options.IgnoredInterfaces.AddIfNotContains(typeof(IAuthorizationEnabled));
});
}
}

1
framework/src/Volo.Abp.Ddd.Application/Volo/Abp/Application/Services/ApplicationService.cs

@ -26,7 +26,6 @@ namespace Volo.Abp.Application.Services
IAvoidDuplicateCrossCuttingConcerns,
IValidationEnabled,
IUnitOfWorkEnabled,
IAuthorizationEnabled,
IAuditingEnabled,
ITransientDependency
{

8
framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptor.cs

@ -8,12 +8,12 @@ namespace Volo.Abp.Features
{
public class FeatureInterceptor : AbpInterceptor, ITransientDependency
{
private readonly IMethodInvocationFeatureCheckerService _methodInvocationAuthorizationService;
private readonly IMethodInvocationFeatureCheckerService _methodInvocationFeatureCheckerService;
public FeatureInterceptor(
IMethodInvocationFeatureCheckerService methodInvocationAuthorizationService)
IMethodInvocationFeatureCheckerService methodInvocationFeatureCheckerService)
{
_methodInvocationAuthorizationService = methodInvocationAuthorizationService;
_methodInvocationFeatureCheckerService = methodInvocationFeatureCheckerService;
}
public override void Intercept(IAbpMethodInvocation invocation)
@ -46,7 +46,7 @@ namespace Volo.Abp.Features
protected virtual Task CheckFeaturesAsync(IAbpMethodInvocation invocation)
{
return _methodInvocationAuthorizationService.CheckAsync(
return _methodInvocationFeatureCheckerService.CheckAsync(
new MethodInvocationFeatureCheckerContext(
invocation.Method
)

4
framework/src/Volo.Abp.Features/Volo/Abp/Features/FeatureInterceptorRegistrar.cs

@ -18,10 +18,10 @@ namespace Volo.Abp.Features
private static bool ShouldIntercept(Type type)
{
return type.IsDefined(typeof(RequiresFeatureAttribute), true) ||
AnyMethodRequiresFeatureAttribute(type);
AnyMethodHasRequiresFeatureAttribute(type);
}
private static bool AnyMethodRequiresFeatureAttribute(Type implementationType)
private static bool AnyMethodHasRequiresFeatureAttribute(Type implementationType)
{
return implementationType
.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)

24
framework/src/Volo.Abp.Features/Volo/Abp/Features/MethodInvocationFeatureCheckerService.cs

@ -1,4 +1,6 @@
using System.Linq;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
@ -21,7 +23,7 @@ namespace Volo.Abp.Features
return;
}
foreach (var requiresFeatureAttribute in GetRequiredFeatureAttributes(context))
foreach (var requiresFeatureAttribute in GetRequiredFeatureAttributes(context.Method))
{
await _featureChecker.CheckEnabledAsync(requiresFeatureAttribute.RequiresAll, requiresFeatureAttribute.Features);
}
@ -35,17 +37,23 @@ namespace Volo.Abp.Features
.Any();
}
protected virtual RequiresFeatureAttribute[] GetRequiredFeatureAttributes(MethodInvocationFeatureCheckerContext context)
protected virtual IEnumerable<RequiresFeatureAttribute> GetRequiredFeatureAttributes(MethodInfo methodInfo)
{
var classAttributes = context.Method.DeclaringType
var attributes = methodInfo
.GetCustomAttributes(true)
.OfType<RequiresFeatureAttribute>();
var methodAttributes = context.Method
.GetCustomAttributes(true)
.OfType<RequiresFeatureAttribute>();
if (methodInfo.IsPublic)
{
attributes = attributes
.Union(
methodInfo.DeclaringType
.GetCustomAttributes(true)
.OfType<RequiresFeatureAttribute>()
);
}
return classAttributes.Union(methodAttributes).ToArray();
return attributes;
}
}
}
Loading…
Cancel
Save