From 5ddcdc27fdcec0aee0d082310bec08de74fc3c6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 9 Feb 2018 16:58:39 +0300 Subject: [PATCH] Added layers for permission system. --- Volo.Abp.sln | 24 +++++++++ .../Volo.Abp.Permissions.Domain.Shared.csproj | 20 +++++++ .../AbpPermissionsDomainSharedModule.cs | 13 +++++ .../Abp/Permissions/PermissionGrantConsts.cs | 11 ++++ .../Volo.Abp.Permissions.Domain.csproj | 22 ++++++++ .../Permissions/AbpPermissionsDomainModule.cs | 16 ++++++ .../Volo/Abp/Permissions/AbpSettingsConsts.cs | 9 ++++ .../Permissions/IPermissionGrantRepository.cs | 14 +++++ .../Volo/Abp/Permissions/PermissionGrant.cs | 41 ++++++++++++++ .../Volo/Abp/Permissions/PermissionStore.cs | 53 +++++++++++++++++++ ...Abp.Permissions.EntityFrameworkCore.csproj | 21 ++++++++ .../AbpPermissionsDbContext.cs | 28 ++++++++++ ...missionsDbContextModelBuilderExtensions.cs | 33 ++++++++++++ .../AbpSettingsEntityFrameworkCoreModule.cs | 23 ++++++++ .../EfCorePermissionGrantRepository.cs | 29 ++++++++++ .../IAbpPermissionsDbContext.cs | 10 ++++ ...ationModule.cs => AbpPermissionsModule.cs} | 0 .../Volo/Abp/Permissions/IPermissionStore.cs | 2 +- .../Abp/Permissions/NullPermissionStore.cs | 2 +- .../Volo/Abp/Settings/SettingStore.cs | 12 +++-- 20 files changed, 376 insertions(+), 7 deletions(-) create mode 100644 src/Volo.Abp.Permissions.Domain.Shared/Volo.Abp.Permissions.Domain.Shared.csproj create mode 100644 src/Volo.Abp.Permissions.Domain.Shared/Volo/Abp/Permissions/AbpPermissionsDomainSharedModule.cs create mode 100644 src/Volo.Abp.Permissions.Domain.Shared/Volo/Abp/Permissions/PermissionGrantConsts.cs create mode 100644 src/Volo.Abp.Permissions.Domain/Volo.Abp.Permissions.Domain.csproj create mode 100644 src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/AbpPermissionsDomainModule.cs create mode 100644 src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/AbpSettingsConsts.cs create mode 100644 src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/IPermissionGrantRepository.cs create mode 100644 src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrant.cs create mode 100644 src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionStore.cs create mode 100644 src/Volo.Abp.Permissions.EntityFrameworkCore/Volo.Abp.Permissions.EntityFrameworkCore.csproj create mode 100644 src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/AbpPermissionsDbContext.cs create mode 100644 src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/AbpPermissionsDbContextModelBuilderExtensions.cs create mode 100644 src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/AbpSettingsEntityFrameworkCoreModule.cs create mode 100644 src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/EfCorePermissionGrantRepository.cs create mode 100644 src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/IAbpPermissionsDbContext.cs rename src/Volo.Abp.Permissions/Volo/Abp/Permissions/{AbpAuthorizationModule.cs => AbpPermissionsModule.cs} (100%) diff --git a/Volo.Abp.sln b/Volo.Abp.sln index 33b57a38e5..b8e408ed89 100644 --- a/Volo.Abp.sln +++ b/Volo.Abp.sln @@ -260,6 +260,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Abp.Settings", "Abp.Setting EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Permissions", "src\Volo.Abp.Permissions\Volo.Abp.Permissions.csproj", "{0FDD21F9-9E73-4DB5-8356-A110D3FBDB1D}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Abp.Permissions", "Abp.Permissions", "{055F4AC0-46C4-4E99-89CD-0F30D4A97382}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Permissions.Domain", "src\Volo.Abp.Permissions.Domain\Volo.Abp.Permissions.Domain.csproj", "{D77E0662-8404-43C5-9C46-6289EA207A40}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Permissions.Domain.Shared", "src\Volo.Abp.Permissions.Domain.Shared\Volo.Abp.Permissions.Domain.Shared.csproj", "{E4D0326C-515D-46FA-AF7E-1AC32155BD03}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Permissions.EntityFrameworkCore", "src\Volo.Abp.Permissions.EntityFrameworkCore\Volo.Abp.Permissions.EntityFrameworkCore.csproj", "{2300E155-2621-4FCF-BD44-B61BA5A92B82}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -678,6 +686,18 @@ Global {0FDD21F9-9E73-4DB5-8356-A110D3FBDB1D}.Debug|Any CPU.Build.0 = Debug|Any CPU {0FDD21F9-9E73-4DB5-8356-A110D3FBDB1D}.Release|Any CPU.ActiveCfg = Release|Any CPU {0FDD21F9-9E73-4DB5-8356-A110D3FBDB1D}.Release|Any CPU.Build.0 = Release|Any CPU + {D77E0662-8404-43C5-9C46-6289EA207A40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D77E0662-8404-43C5-9C46-6289EA207A40}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D77E0662-8404-43C5-9C46-6289EA207A40}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D77E0662-8404-43C5-9C46-6289EA207A40}.Release|Any CPU.Build.0 = Release|Any CPU + {E4D0326C-515D-46FA-AF7E-1AC32155BD03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E4D0326C-515D-46FA-AF7E-1AC32155BD03}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E4D0326C-515D-46FA-AF7E-1AC32155BD03}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E4D0326C-515D-46FA-AF7E-1AC32155BD03}.Release|Any CPU.Build.0 = Release|Any CPU + {2300E155-2621-4FCF-BD44-B61BA5A92B82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2300E155-2621-4FCF-BD44-B61BA5A92B82}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2300E155-2621-4FCF-BD44-B61BA5A92B82}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2300E155-2621-4FCF-BD44-B61BA5A92B82}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -804,6 +824,10 @@ Global {27F990E2-6820-4159-B54A-59C8ADED8D28} = {D62B8D43-B8D9-4FC6-97E2-DC54CD765915} {D62B8D43-B8D9-4FC6-97E2-DC54CD765915} = {3B481ACC-5BB3-4189-880C-5F7A27EAEB70} {0FDD21F9-9E73-4DB5-8356-A110D3FBDB1D} = {4C753F64-0C93-4D65-96C2-A40893AFC1E8} + {055F4AC0-46C4-4E99-89CD-0F30D4A97382} = {3B481ACC-5BB3-4189-880C-5F7A27EAEB70} + {D77E0662-8404-43C5-9C46-6289EA207A40} = {055F4AC0-46C4-4E99-89CD-0F30D4A97382} + {E4D0326C-515D-46FA-AF7E-1AC32155BD03} = {055F4AC0-46C4-4E99-89CD-0F30D4A97382} + {2300E155-2621-4FCF-BD44-B61BA5A92B82} = {055F4AC0-46C4-4E99-89CD-0F30D4A97382} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/src/Volo.Abp.Permissions.Domain.Shared/Volo.Abp.Permissions.Domain.Shared.csproj b/src/Volo.Abp.Permissions.Domain.Shared/Volo.Abp.Permissions.Domain.Shared.csproj new file mode 100644 index 0000000000..fef7b37c72 --- /dev/null +++ b/src/Volo.Abp.Permissions.Domain.Shared/Volo.Abp.Permissions.Domain.Shared.csproj @@ -0,0 +1,20 @@ + + + + + + netstandard2.0 + Volo.Abp.Permissions.Domain.Shared + Volo.Abp.Permissions.Domain.Shared + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + diff --git a/src/Volo.Abp.Permissions.Domain.Shared/Volo/Abp/Permissions/AbpPermissionsDomainSharedModule.cs b/src/Volo.Abp.Permissions.Domain.Shared/Volo/Abp/Permissions/AbpPermissionsDomainSharedModule.cs new file mode 100644 index 0000000000..b813ae517e --- /dev/null +++ b/src/Volo.Abp.Permissions.Domain.Shared/Volo/Abp/Permissions/AbpPermissionsDomainSharedModule.cs @@ -0,0 +1,13 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; + +namespace Volo.Abp.Permissions +{ + public class AbpPermissionsDomainSharedModule : AbpModule + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddAssemblyOf(); + } + } +} diff --git a/src/Volo.Abp.Permissions.Domain.Shared/Volo/Abp/Permissions/PermissionGrantConsts.cs b/src/Volo.Abp.Permissions.Domain.Shared/Volo/Abp/Permissions/PermissionGrantConsts.cs new file mode 100644 index 0000000000..e6fa7b129f --- /dev/null +++ b/src/Volo.Abp.Permissions.Domain.Shared/Volo/Abp/Permissions/PermissionGrantConsts.cs @@ -0,0 +1,11 @@ +namespace Volo.Abp.Permissions +{ + public static class PermissionGrantConsts + { + public const int MaxNameLength = 128; + + public const int MaxProviderNameLength = 64; + + public const int MaxProviderKeyLength = 64; + } +} diff --git a/src/Volo.Abp.Permissions.Domain/Volo.Abp.Permissions.Domain.csproj b/src/Volo.Abp.Permissions.Domain/Volo.Abp.Permissions.Domain.csproj new file mode 100644 index 0000000000..a8dd53e12c --- /dev/null +++ b/src/Volo.Abp.Permissions.Domain/Volo.Abp.Permissions.Domain.csproj @@ -0,0 +1,22 @@ + + + + + + netstandard2.0 + Volo.Abp.Permissions.Domain + Volo.Abp.Permissions.Domain + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + + + diff --git a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/AbpPermissionsDomainModule.cs b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/AbpPermissionsDomainModule.cs new file mode 100644 index 0000000000..def72d7cf8 --- /dev/null +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/AbpPermissionsDomainModule.cs @@ -0,0 +1,16 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; + +namespace Volo.Abp.Permissions +{ + [DependsOn(typeof(AbpPermissionsModule))] + [DependsOn(typeof(AbpDddModule))] + [DependsOn(typeof(AbpPermissionsDomainSharedModule))] + public class AbpPermissionsDomainModule : AbpModule + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddAssemblyOf(); + } + } +} diff --git a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/AbpSettingsConsts.cs b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/AbpSettingsConsts.cs new file mode 100644 index 0000000000..ce9186f737 --- /dev/null +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/AbpSettingsConsts.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.Permissions +{ + public static class AbpPermissionConsts + { + public const string DefaultDbTablePrefix = "Abp"; + + public const string DefaultDbSchema = null; + } +} diff --git a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/IPermissionGrantRepository.cs b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/IPermissionGrantRepository.cs new file mode 100644 index 0000000000..4ec344d30a --- /dev/null +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/IPermissionGrantRepository.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; + +namespace Volo.Abp.Permissions +{ + public interface IPermissionGrantRepository : IBasicRepository + { + Task FindAsync(string name, string providerName, string providerKey); + + Task> GetListAsync(string providerName, string providerKey); + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrant.cs b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrant.cs new file mode 100644 index 0000000000..a075e5ae4c --- /dev/null +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionGrant.cs @@ -0,0 +1,41 @@ +using System; +using JetBrains.Annotations; +using Volo.Abp.Domain.Entities; + +namespace Volo.Abp.Permissions +{ + public class PermissionGrant : Entity + { + [NotNull] + public virtual string Name { get; protected set; } + + public virtual bool IsGranted { get; internal set; } + + [CanBeNull] + public virtual string ProviderName { get; protected set; } + + [CanBeNull] + public virtual string ProviderKey { get; protected set; } + + protected PermissionGrant() + { + + } + + public PermissionGrant( + Guid id, + [NotNull] string name, + bool isGranted, + [CanBeNull] string providerName = null, + [CanBeNull] string providerKey = null) + { + Check.NotNull(name, nameof(name)); + + Id = id; + Name = name; + IsGranted = isGranted; + ProviderName = providerName; + ProviderKey = providerKey; + } + } +} diff --git a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionStore.cs b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionStore.cs new file mode 100644 index 0000000000..cc6e18036c --- /dev/null +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionStore.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.Permissions +{ + public class PermissionStore : AbpServiceBase, IPermissionStore, ITransientDependency + { + private readonly IPermissionGrantRepository _permissionGrantRepository; + + public PermissionStore(IPermissionGrantRepository permissionGrantRepository) + { + _permissionGrantRepository = permissionGrantRepository; + } + + public async Task IsGrantedAsync(string name, string providerName, string providerKey) + { + var permissionGrant = await _permissionGrantRepository.FindAsync(name, providerName, providerKey); + return permissionGrant?.IsGranted; + } + + public async Task SetAsync(string name, bool isGranted, string providerName, string providerKey) + { + var permissionGrant = await _permissionGrantRepository.FindAsync(name, providerName, providerKey); + if (permissionGrant == null) + { + permissionGrant = new PermissionGrant(GuidGenerator.Create(), name, isGranted, providerName, providerKey); + await _permissionGrantRepository.InsertAsync(permissionGrant); + } + else + { + permissionGrant.IsGranted = isGranted; + await _permissionGrantRepository.UpdateAsync(permissionGrant); + } + } + + public async Task> GetListAsync(string providerName, string providerKey) + { + var permissionGrants = await _permissionGrantRepository.GetListAsync(providerName, providerKey); + return permissionGrants.Select(s => new PermissionGrantInfo(s.Name, s.IsGranted)).ToList(); + } + + public async Task DeleteAsync(string name, string providerName, string providerKey) + { + var permissionGrant = await _permissionGrantRepository.FindAsync(name, providerName, providerKey); + if (permissionGrant != null) + { + await _permissionGrantRepository.DeleteAsync(permissionGrant); + } + } + } +} diff --git a/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo.Abp.Permissions.EntityFrameworkCore.csproj b/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo.Abp.Permissions.EntityFrameworkCore.csproj new file mode 100644 index 0000000000..f2fd254586 --- /dev/null +++ b/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo.Abp.Permissions.EntityFrameworkCore.csproj @@ -0,0 +1,21 @@ + + + + + + netstandard2.0 + Volo.Abp.Permissions.EntityFrameworkCore + Volo.Abp.Permissions.EntityFrameworkCore + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + + diff --git a/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/AbpPermissionsDbContext.cs b/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/AbpPermissionsDbContext.cs new file mode 100644 index 0000000000..589f2d1b81 --- /dev/null +++ b/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/AbpPermissionsDbContext.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Data; +using Volo.Abp.EntityFrameworkCore; + +namespace Volo.Abp.Permissions.EntityFrameworkCore +{ + [ConnectionStringName("AbpPermissions")] + public class AbpPermissionsDbContext : AbpDbContext, IAbpPermissionsDbContext + { + public static string TablePrefix { get; set; } = AbpPermissionConsts.DefaultDbTablePrefix; + + public static string Schema { get; set; } = AbpPermissionConsts.DefaultDbSchema; + + public DbSet PermissionGrants { get; set; } + + public AbpPermissionsDbContext(DbContextOptions options) + : base(options) + { + + } + + protected override void OnModelCreating(ModelBuilder builder) + { + base.OnModelCreating(builder); + builder.ConfigureAbpPermissions(TablePrefix, Schema); + } + } +} diff --git a/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/AbpPermissionsDbContextModelBuilderExtensions.cs b/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/AbpPermissionsDbContextModelBuilderExtensions.cs new file mode 100644 index 0000000000..fe6c5f1c42 --- /dev/null +++ b/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/AbpPermissionsDbContextModelBuilderExtensions.cs @@ -0,0 +1,33 @@ +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; + +namespace Volo.Abp.Permissions.EntityFrameworkCore +{ + public static class AbpPermissionsDbContextModelBuilderExtensions + { + public static void ConfigureAbpPermissions( + [NotNull] this ModelBuilder builder, + [CanBeNull] string tablePrefix = AbpPermissionConsts.DefaultDbTablePrefix, + [CanBeNull] string schema = AbpPermissionConsts.DefaultDbSchema) + { + Check.NotNull(builder, nameof(builder)); + + if (tablePrefix == null) + { + tablePrefix = ""; + } + + builder.Entity(b => + { + b.ToTable(tablePrefix + "Permissions", schema); + + b.Property(x => x.Name).HasMaxLength(PermissionGrantConsts.MaxNameLength).IsRequired(); + b.Property(x => x.IsGranted).IsRequired().HasDefaultValue(true); + b.Property(x => x.ProviderName).HasMaxLength(PermissionGrantConsts.MaxProviderNameLength); + b.Property(x => x.ProviderKey).HasMaxLength(PermissionGrantConsts.MaxProviderKeyLength); + + b.HasIndex(x => new {x.Name, x.ProviderName, x.ProviderKey}); + }); + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/AbpSettingsEntityFrameworkCoreModule.cs b/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/AbpSettingsEntityFrameworkCoreModule.cs new file mode 100644 index 0000000000..13f7232ce4 --- /dev/null +++ b/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/AbpSettingsEntityFrameworkCoreModule.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.Modularity; + +namespace Volo.Abp.Permissions.EntityFrameworkCore +{ + [DependsOn(typeof(AbpPermissionsDomainModule))] + [DependsOn(typeof(AbpEntityFrameworkCoreModule))] + public class AbpPermissionsEntityFrameworkCoreModule : AbpModule + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddAbpDbContext(options => + { + options.AddDefaultRepositories(); + + options.AddRepository(); + }); + + services.AddAssemblyOf(); + } + } +} diff --git a/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/EfCorePermissionGrantRepository.cs b/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/EfCorePermissionGrantRepository.cs new file mode 100644 index 0000000000..261781b3b9 --- /dev/null +++ b/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/EfCorePermissionGrantRepository.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + +namespace Volo.Abp.Permissions.EntityFrameworkCore +{ + public class EfCorePermissionGrantRepository : EfCoreRepository, IPermissionGrantRepository + { + public EfCorePermissionGrantRepository(IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + + } + + public async Task FindAsync(string name, string providerName, string providerKey) + { + return await DbSet.FirstOrDefaultAsync(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey); + } + + public async Task> GetListAsync(string providerName, string providerKey) + { + return await DbSet.Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey).ToListAsync(); + } + } +} diff --git a/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/IAbpPermissionsDbContext.cs b/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/IAbpPermissionsDbContext.cs new file mode 100644 index 0000000000..b35c214984 --- /dev/null +++ b/src/Volo.Abp.Permissions.EntityFrameworkCore/Volo/Abp/Permissions/EntityFrameworkCore/IAbpPermissionsDbContext.cs @@ -0,0 +1,10 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + +namespace Volo.Abp.Permissions.EntityFrameworkCore +{ + public interface IAbpPermissionsDbContext : IEfCoreDbContext + { + DbSet PermissionGrants { get; set; } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/AbpAuthorizationModule.cs b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/AbpPermissionsModule.cs similarity index 100% rename from src/Volo.Abp.Permissions/Volo/Abp/Permissions/AbpAuthorizationModule.cs rename to src/Volo.Abp.Permissions/Volo/Abp/Permissions/AbpPermissionsModule.cs diff --git a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionStore.cs b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionStore.cs index 54d7436cf5..90dd2e0535 100644 --- a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionStore.cs +++ b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionStore.cs @@ -6,7 +6,7 @@ namespace Volo.Abp.Permissions { public interface IPermissionStore { - Task GetOrNullAsync([NotNull] string name, [CanBeNull] string providerName, [CanBeNull] string providerKey); + Task IsGrantedAsync([NotNull] string name, [CanBeNull] string providerName, [CanBeNull] string providerKey); Task SetAsync([NotNull] string name, bool isGranted, [CanBeNull] string providerName, [CanBeNull] string providerKey); diff --git a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/NullPermissionStore.cs b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/NullPermissionStore.cs index 90b59b1c19..f68f92bd41 100644 --- a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/NullPermissionStore.cs +++ b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/NullPermissionStore.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.Permissions Logger = NullLogger.Instance; } - public Task GetOrNullAsync(string name, string providerName, string providerKey) + public Task IsGrantedAsync(string name, string providerName, string providerKey) { return Task.FromResult((bool?)null); } diff --git a/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/SettingStore.cs b/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/SettingStore.cs index a1bb9b3c3d..6312249fc7 100644 --- a/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/SettingStore.cs +++ b/src/Volo.Abp.Settings.Domain/Volo/Abp/Settings/SettingStore.cs @@ -28,15 +28,17 @@ namespace Volo.Abp.Settings setting = new Setting(GuidGenerator.Create(), name, value, providerName, providerKey); await _settingRepository.InsertAsync(setting); } - - setting.Value = value; - await _settingRepository.UpdateAsync(setting); + else + { + setting.Value = value; + await _settingRepository.UpdateAsync(setting); + } } public async Task> GetListAsync(string providerName, string providerKey) { - var setting = await _settingRepository.GetListAsync(providerName, providerKey); - return setting.Select(s => new SettingValue(s.Name, s.Value)).ToList(); + var settings = await _settingRepository.GetListAsync(providerName, providerKey); + return settings.Select(s => new SettingValue(s.Name, s.Value)).ToList(); } public async Task DeleteAsync(string name, string providerName, string providerKey)