mirror of https://github.com/abpframework/abp.git
csharpabpc-sharpframeworkblazoraspnet-coredotnet-coreaspnetcorearchitecturesaasdomain-driven-designangularmulti-tenancy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.7 KiB
51 lines
1.7 KiB
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Volo.Abp.DependencyInjection;
|
|
|
|
namespace Volo.Abp.Features
|
|
{
|
|
public class MethodInvocationFeatureCheckerService : IMethodInvocationFeatureCheckerService, ITransientDependency
|
|
{
|
|
private readonly IFeatureChecker _featureChecker;
|
|
|
|
public MethodInvocationFeatureCheckerService(
|
|
IFeatureChecker featureChecker)
|
|
{
|
|
_featureChecker = featureChecker;
|
|
}
|
|
|
|
public async Task CheckAsync(MethodInvocationFeatureCheckerContext context)
|
|
{
|
|
if (IsFeatureCheckDisabled(context))
|
|
{
|
|
return;
|
|
}
|
|
|
|
foreach (var requiresFeatureAttribute in GetRequiredFeatureAttributes(context))
|
|
{
|
|
await _featureChecker.CheckEnabledAsync(requiresFeatureAttribute.RequiresAll, requiresFeatureAttribute.Features);
|
|
}
|
|
}
|
|
|
|
protected virtual bool IsFeatureCheckDisabled(MethodInvocationFeatureCheckerContext context)
|
|
{
|
|
return context.Method
|
|
.GetCustomAttributes(true)
|
|
.OfType<DisableFeatureCheckAttribute>()
|
|
.Any();
|
|
}
|
|
|
|
protected virtual RequiresFeatureAttribute[] GetRequiredFeatureAttributes(MethodInvocationFeatureCheckerContext context)
|
|
{
|
|
var classAttributes = context.Method.DeclaringType
|
|
.GetCustomAttributes(true)
|
|
.OfType<RequiresFeatureAttribute>();
|
|
|
|
var methodAttributes = context.Method
|
|
.GetCustomAttributes(true)
|
|
.OfType<RequiresFeatureAttribute>();
|
|
|
|
return classAttributes.Union(methodAttributes).ToArray();
|
|
}
|
|
}
|
|
}
|