mirror of https://github.com/abpframework/abp.git
11 changed files with 128 additions and 52 deletions
@ -1,34 +1,19 @@ |
|||
using System.Collections.Generic; |
|||
using JetBrains.Annotations; |
|||
using JetBrains.Annotations; |
|||
|
|||
namespace Volo.Abp.Authorization.Permissions |
|||
{ |
|||
public static class PermissionDefinitionExtensions |
|||
{ |
|||
public const string PropertyName = "_AbpPermissionStateProviders"; |
|||
|
|||
public static PermissionDefinition AddStateProvider( |
|||
public static PermissionDefinition AddStateProviders( |
|||
[NotNull] this PermissionDefinition permissionDefinition, |
|||
[NotNull] params IPermissionStateProvider[] permissionStateProviders) |
|||
{ |
|||
var stateProviders = permissionDefinition.GetStateProvidersInternal(); |
|||
|
|||
foreach (var provider in permissionStateProviders) |
|||
{ |
|||
stateProviders.AddIfNotContains(provider); |
|||
} |
|||
|
|||
Check.NotNull(permissionDefinition, nameof(permissionDefinition)); |
|||
Check.NotNull(permissionStateProviders, nameof(permissionStateProviders)); |
|||
|
|||
permissionDefinition.StateProviders.AddRange(permissionStateProviders); |
|||
|
|||
return permissionDefinition; |
|||
} |
|||
|
|||
public static IReadOnlyList<IPermissionStateProvider> GetStateProviders([NotNull] this PermissionDefinition permissionDefinition) |
|||
{ |
|||
return permissionDefinition.GetStateProvidersInternal(); |
|||
} |
|||
|
|||
private static List<IPermissionStateProvider> GetStateProvidersInternal([NotNull] this PermissionDefinition permissionDefinition) |
|||
{ |
|||
return (List<IPermissionStateProvider>) permissionDefinition.Properties.GetOrAdd(PropertyName, () => new List<IPermissionStateProvider>()); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,31 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Volo.Abp.DependencyInjection |
|||
{ |
|||
[ExposeServices(typeof(ICachedServiceProvider))] |
|||
public class CachedServiceProvider : ICachedServiceProvider, IScopedDependency |
|||
{ |
|||
protected IServiceProvider ServiceProvider { get; } |
|||
|
|||
protected IDictionary<Type, object> CachedServices { get; } |
|||
|
|||
public CachedServiceProvider(IServiceProvider serviceProvider) |
|||
{ |
|||
ServiceProvider = serviceProvider; |
|||
|
|||
CachedServices = new Dictionary<Type, object> |
|||
{ |
|||
{typeof(IServiceProvider), serviceProvider} |
|||
}; |
|||
} |
|||
|
|||
public object GetService(Type serviceType) |
|||
{ |
|||
return CachedServices.GetOrAdd( |
|||
serviceType, |
|||
() => ServiceProvider.GetService(serviceType) |
|||
); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
using System; |
|||
|
|||
namespace Volo.Abp.DependencyInjection |
|||
{ |
|||
/// <summary>
|
|||
/// Provides services by caching the resolved services.
|
|||
/// It caches all type of services including transients.
|
|||
/// This service's lifetime is scoped and it should be used
|
|||
/// for a limited scope.
|
|||
/// </summary>
|
|||
public interface ICachedServiceProvider : IServiceProvider |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -1,14 +1,28 @@ |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.Authorization.Permissions; |
|||
|
|||
namespace Volo.Abp.Features |
|||
{ |
|||
public static class FeatureDefinitionExtensions |
|||
{ |
|||
public static PermissionDefinition RequireFeatures(this PermissionDefinition permissionDefinition, params string[] features) |
|||
public static PermissionDefinition RequireFeatures( |
|||
[NotNull] this PermissionDefinition permissionDefinition, |
|||
params string[] features) |
|||
{ |
|||
return permissionDefinition.RequireFeatures(true, features); |
|||
} |
|||
|
|||
public static PermissionDefinition RequireFeatures( |
|||
[NotNull] this PermissionDefinition permissionDefinition, |
|||
bool requiresAll, |
|||
params string[] features) |
|||
{ |
|||
Check.NotNull(permissionDefinition, nameof(permissionDefinition)); |
|||
Check.NotNullOrEmpty(features, nameof(features)); |
|||
|
|||
return permissionDefinition.AddStateProvider(new RequireFeaturesPermissionStateProvider(features)); |
|||
return permissionDefinition.AddStateProviders( |
|||
new RequireFeaturesPermissionStateProvider(requiresAll, features) |
|||
); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@ -1,14 +1,29 @@ |
|||
using Volo.Abp.Authorization.Permissions; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.Authorization.Permissions; |
|||
|
|||
namespace Volo.Abp.GlobalFeatures |
|||
{ |
|||
public static class GlobalFeatureDefinitionExtensions |
|||
{ |
|||
public static PermissionDefinition RequireGlobalFeatures(this PermissionDefinition permissionDefinition, params string[] globalFeatures) |
|||
public static PermissionDefinition RequireGlobalFeatures( |
|||
this PermissionDefinition permissionDefinition, |
|||
params string[] globalFeatures) |
|||
{ |
|||
return permissionDefinition.RequireGlobalFeatures(true, globalFeatures); |
|||
} |
|||
|
|||
public static PermissionDefinition RequireGlobalFeatures( |
|||
[NotNull] this PermissionDefinition permissionDefinition, |
|||
bool requiresAll, |
|||
params string[] globalFeatures) |
|||
{ |
|||
Check.NotNull(permissionDefinition, nameof(permissionDefinition)); |
|||
Check.NotNullOrEmpty(globalFeatures, nameof(globalFeatures)); |
|||
|
|||
return permissionDefinition.AddStateProvider(new RequireGlobalFeaturesPermissionStateProvider(globalFeatures)); |
|||
return permissionDefinition.AddStateProviders( |
|||
new RequireGlobalFeaturesPermissionStateProvider(requiresAll, globalFeatures) |
|||
); |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
Loading…
Reference in new issue