From b50cee6bd00c199e683b6947a59c6d6381da0e65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 13 Feb 2018 15:34:21 +0300 Subject: [PATCH] Work on permission re-design. --- Volo.Abp.sln | 29 ++++++++++-- .../AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs | 2 + .../Services/ApplicationService.cs | 2 + ...p.Permissions.Application.Contracts.csproj | 21 +++++++++ .../AbpPermissionsDomainSharedModule.cs | 15 +++++++ .../Abp/Permissions/IPermissionAppService.cs | 16 +++++++ .../Abp/Permissions/PermissionGrantInfoDto.cs | 15 +++++++ .../Abp/Permissions/UpdatePermissionDto.cs | 9 ++++ .../Abp/Permissions/UpdatePermissionsDto.cs | 7 +++ .../Volo.Abp.Permissions.Application.csproj | 21 +++++++++ .../AbpPermissionsApplicationModule.cs | 15 +++++++ .../Abp/Permissions/PermissionAppService.cs | 34 ++++++++++++++ .../Abp/Permissions/IPermissionManager.cs | 2 +- .../Volo/Abp/Permissions/PermissionManager.cs | 4 +- .../AbpPermissionsWebAutoMapperProfile.cs | 16 +++++++ .../AbpPermissionsWebModule.cs | 45 +++++++++++++++++++ .../AbpPermissions/IdentityResource.cs | 15 +++++++ .../Resources/AbpPermissions/en.json | 18 ++++++++ .../Resources/AbpPermissions/tr.json | 25 +++++++++++ .../PermissionManagementModal.cshtml | 30 +++++++++++++ .../PermissionManagementModal.cshtml.cs | 33 ++++++++++++++ .../Properties/launchSettings.json | 27 +++++++++++ .../Volo.Abp.Permissions.Web.csproj | 30 +++++++++++++ .../Abp/Permissions/IPermissionChecker.cs | 5 +-- .../Volo/Abp/Permissions/PermissionChecker.cs | 15 +------ .../PermissionManager_User_Tests.cs | 16 ------- 26 files changed, 426 insertions(+), 41 deletions(-) create mode 100644 src/Volo.Abp.Permissions.Application.Contracts/Volo.Abp.Permissions.Application.Contracts.csproj create mode 100644 src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/AbpPermissionsDomainSharedModule.cs create mode 100644 src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/IPermissionAppService.cs create mode 100644 src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/PermissionGrantInfoDto.cs create mode 100644 src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/UpdatePermissionDto.cs create mode 100644 src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/UpdatePermissionsDto.cs create mode 100644 src/Volo.Abp.Permissions.Application/Volo.Abp.Permissions.Application.csproj create mode 100644 src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/AbpPermissionsApplicationModule.cs create mode 100644 src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/PermissionAppService.cs create mode 100644 src/Volo.Abp.Permissions.Web/AbpPermissionsWebAutoMapperProfile.cs create mode 100644 src/Volo.Abp.Permissions.Web/AbpPermissionsWebModule.cs create mode 100644 src/Volo.Abp.Permissions.Web/Localization/Resources/AbpPermissions/IdentityResource.cs create mode 100644 src/Volo.Abp.Permissions.Web/Localization/Resources/AbpPermissions/en.json create mode 100644 src/Volo.Abp.Permissions.Web/Localization/Resources/AbpPermissions/tr.json create mode 100644 src/Volo.Abp.Permissions.Web/Pages/Permissions/PermissionManagementModal.cshtml create mode 100644 src/Volo.Abp.Permissions.Web/Pages/Permissions/PermissionManagementModal.cshtml.cs create mode 100644 src/Volo.Abp.Permissions.Web/Properties/launchSettings.json create mode 100644 src/Volo.Abp.Permissions.Web/Volo.Abp.Permissions.Web.csproj diff --git a/Volo.Abp.sln b/Volo.Abp.sln index 4969f315ae..d22f0dd3ca 100644 --- a/Volo.Abp.sln +++ b/Volo.Abp.sln @@ -258,18 +258,24 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Settings.Domain.Sh EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Abp.Settings", "Abp.Settings", "{D62B8D43-B8D9-4FC6-97E2-DC54CD765915}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Permissions", "src\Volo.Abp.Permissions\Volo.Abp.Permissions.csproj", "{0FDD21F9-9E73-4DB5-8356-A110D3FBDB1D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "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}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Permissions.EntityFrameworkCore", "src\Volo.Abp.Permissions.EntityFrameworkCore\Volo.Abp.Permissions.EntityFrameworkCore.csproj", "{2300E155-2621-4FCF-BD44-B61BA5A92B82}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Permissions.Tests", "test\Volo.Abp.Permissions.Tests\Volo.Abp.Permissions.Tests.csproj", "{7B4D2BEB-DE3E-4533-8CD4-7BBB30414647}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Permissions.Web", "src\Volo.Abp.Permissions.Web\Volo.Abp.Permissions.Web.csproj", "{8859CFE4-BC7F-4F29-B6B5-A9457435CC32}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Permissions.Application.Contracts", "src\Volo.Abp.Permissions.Application.Contracts\Volo.Abp.Permissions.Application.Contracts.csproj", "{837ABFF5-66EE-486A-8023-8DD3EE7D7D96}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Permissions.Application", "src\Volo.Abp.Permissions.Application\Volo.Abp.Permissions.Application.csproj", "{90197499-CBB6-4C8C-90E6-8718CD755C04}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -704,6 +710,18 @@ Global {7B4D2BEB-DE3E-4533-8CD4-7BBB30414647}.Debug|Any CPU.Build.0 = Debug|Any CPU {7B4D2BEB-DE3E-4533-8CD4-7BBB30414647}.Release|Any CPU.ActiveCfg = Release|Any CPU {7B4D2BEB-DE3E-4533-8CD4-7BBB30414647}.Release|Any CPU.Build.0 = Release|Any CPU + {8859CFE4-BC7F-4F29-B6B5-A9457435CC32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8859CFE4-BC7F-4F29-B6B5-A9457435CC32}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8859CFE4-BC7F-4F29-B6B5-A9457435CC32}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8859CFE4-BC7F-4F29-B6B5-A9457435CC32}.Release|Any CPU.Build.0 = Release|Any CPU + {837ABFF5-66EE-486A-8023-8DD3EE7D7D96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {837ABFF5-66EE-486A-8023-8DD3EE7D7D96}.Debug|Any CPU.Build.0 = Debug|Any CPU + {837ABFF5-66EE-486A-8023-8DD3EE7D7D96}.Release|Any CPU.ActiveCfg = Release|Any CPU + {837ABFF5-66EE-486A-8023-8DD3EE7D7D96}.Release|Any CPU.Build.0 = Release|Any CPU + {90197499-CBB6-4C8C-90E6-8718CD755C04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90197499-CBB6-4C8C-90E6-8718CD755C04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90197499-CBB6-4C8C-90E6-8718CD755C04}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90197499-CBB6-4C8C-90E6-8718CD755C04}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -835,6 +853,9 @@ Global {E4D0326C-515D-46FA-AF7E-1AC32155BD03} = {055F4AC0-46C4-4E99-89CD-0F30D4A97382} {2300E155-2621-4FCF-BD44-B61BA5A92B82} = {055F4AC0-46C4-4E99-89CD-0F30D4A97382} {7B4D2BEB-DE3E-4533-8CD4-7BBB30414647} = {37087D1B-3693-4E96-983D-A69F210BDE53} + {8859CFE4-BC7F-4F29-B6B5-A9457435CC32} = {055F4AC0-46C4-4E99-89CD-0F30D4A97382} + {837ABFF5-66EE-486A-8023-8DD3EE7D7D96} = {055F4AC0-46C4-4E99-89CD-0F30D4A97382} + {90197499-CBB6-4C8C-90E6-8718CD755C04} = {055F4AC0-46C4-4E99-89CD-0F30D4A97382} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs b/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs index 888efc6fb2..434ad1585f 100644 --- a/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs +++ b/src/AbpDesk/AbpDesk.Web.Mvc/AbpDeskWebMvcModule.cs @@ -79,6 +79,8 @@ namespace AbpDesk.Web.Mvc var authentication = services.AddAuthentication(); + services.AddAuthorization(); + authentication.AddIdentityServerAuthentication("Bearer", options => { options.Authority = "http://localhost:59980"; diff --git a/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/ApplicationService.cs b/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/ApplicationService.cs index e5e7012aa6..7156aa25c9 100644 --- a/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/ApplicationService.cs +++ b/src/Volo.Abp.Ddd/Volo/Abp/Application/Services/ApplicationService.cs @@ -16,5 +16,7 @@ namespace Volo.Abp.Application.Services - AbpSession - ... */ + + //TODO: Add IPermissionChecker (but before split layers of DDD!) } } \ No newline at end of file diff --git a/src/Volo.Abp.Permissions.Application.Contracts/Volo.Abp.Permissions.Application.Contracts.csproj b/src/Volo.Abp.Permissions.Application.Contracts/Volo.Abp.Permissions.Application.Contracts.csproj new file mode 100644 index 0000000000..e77e4c6bcd --- /dev/null +++ b/src/Volo.Abp.Permissions.Application.Contracts/Volo.Abp.Permissions.Application.Contracts.csproj @@ -0,0 +1,21 @@ + + + + + + netstandard2.0 + Volo.Abp.Permissions.Application.Contracts + Volo.Abp.Permissions.Application.Contracts + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + + diff --git a/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/AbpPermissionsDomainSharedModule.cs b/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/AbpPermissionsDomainSharedModule.cs new file mode 100644 index 0000000000..18cdb53190 --- /dev/null +++ b/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/AbpPermissionsDomainSharedModule.cs @@ -0,0 +1,15 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; + +namespace Volo.Abp.Permissions +{ + [DependsOn(typeof(AbpDddModule))] + [DependsOn(typeof(AbpPermissionsDomainSharedModule))] + public class AbpPermissionsApplicationContractsModule : AbpModule + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddAssemblyOf(); + } + } +} diff --git a/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/IPermissionAppService.cs b/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/IPermissionAppService.cs new file mode 100644 index 0000000000..e5f2a5cbe4 --- /dev/null +++ b/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/IPermissionAppService.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Volo.Abp.Application.Services; + +namespace Volo.Abp.Permissions +{ + public interface IPermissionAppService : IApplicationService + { + Task GetAsync([NotNull] string name, [NotNull] string providerName, [NotNull] string providerKey); + + Task> GetListAsync([NotNull] string providerName, [NotNull] string providerKey); + + Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdatePermissionsDto input); + } +} diff --git a/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/PermissionGrantInfoDto.cs b/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/PermissionGrantInfoDto.cs new file mode 100644 index 0000000000..1bd2f88a48 --- /dev/null +++ b/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/PermissionGrantInfoDto.cs @@ -0,0 +1,15 @@ +namespace Volo.Abp.Permissions +{ + public class PermissionGrantInfoDto + { + public string Name { get; set; } + + public string ParentName { get; set; } + + public bool IsGranted { get; set; } + + public string ProviderName { get; set; } + + public string ProviderKey { get; set; } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/UpdatePermissionDto.cs b/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/UpdatePermissionDto.cs new file mode 100644 index 0000000000..5c04577d0a --- /dev/null +++ b/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/UpdatePermissionDto.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.Permissions +{ + public class UpdatePermissionDto + { + public string Name { get; set; } + + public bool IsGranted { get; set; } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/UpdatePermissionsDto.cs b/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/UpdatePermissionsDto.cs new file mode 100644 index 0000000000..99cdd62e87 --- /dev/null +++ b/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/UpdatePermissionsDto.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.Permissions +{ + public class UpdatePermissionsDto + { + public UpdatePermissionDto[] Permissions { get; set; } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions.Application/Volo.Abp.Permissions.Application.csproj b/src/Volo.Abp.Permissions.Application/Volo.Abp.Permissions.Application.csproj new file mode 100644 index 0000000000..f520634eac --- /dev/null +++ b/src/Volo.Abp.Permissions.Application/Volo.Abp.Permissions.Application.csproj @@ -0,0 +1,21 @@ + + + + + + netstandard2.0 + Volo.Abp.Permissions.Application + Volo.Abp.Permissions.Application + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + + diff --git a/src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/AbpPermissionsApplicationModule.cs b/src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/AbpPermissionsApplicationModule.cs new file mode 100644 index 0000000000..7622b7eb5d --- /dev/null +++ b/src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/AbpPermissionsApplicationModule.cs @@ -0,0 +1,15 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; + +namespace Volo.Abp.Permissions +{ + [DependsOn(typeof(AbpPermissionsDomainModule))] + [DependsOn(typeof(AbpPermissionsApplicationContractsModule))] + public class AbpPermissionsApplicationModule : AbpModule + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddAssemblyOf(); + } + } +} diff --git a/src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/PermissionAppService.cs b/src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/PermissionAppService.cs new file mode 100644 index 0000000000..18decfb800 --- /dev/null +++ b/src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/PermissionAppService.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; + +namespace Volo.Abp.Permissions +{ + public class PermissionAppService : ApplicationService, IPermissionAppService + { + private readonly IPermissionManager _permissionManager; + + public PermissionAppService(IPermissionManager permissionManager) + { + _permissionManager = permissionManager; + } + + public async Task GetAsync(string name, string providerName, string providerKey) + { + var result = await _permissionManager.IsGrantedAsync(name, providerName, providerKey); + + throw new NotImplementedException(); + } + + public async Task> GetListAsync(string providerName, string providerKey) + { + throw new NotImplementedException(); + } + + public async Task UpdateAsync(string providerName, string providerKey, UpdatePermissionsDto input) + { + throw new NotImplementedException(); + } + } +} diff --git a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/IPermissionManager.cs b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/IPermissionManager.cs index da4862e3b1..0c6d04cc7b 100644 --- a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/IPermissionManager.cs +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/IPermissionManager.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.Permissions Task> GetAllGrantedAsync([NotNull] string providerName, [NotNull] string providerKey); - Task GrantAsync( [NotNull] string providerName, [NotNull] string providerKey, [NotNull] string name); + Task GrantAsync([NotNull] string name, [NotNull] string providerName, [NotNull] string providerKey); Task RevokeAsync([NotNull] string name, [NotNull] string providerName, [NotNull] string providerKey); } diff --git a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionManager.cs b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionManager.cs index 787e92a7d5..f439dd6f57 100644 --- a/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionManager.cs +++ b/src/Volo.Abp.Permissions.Domain/Volo/Abp/Permissions/PermissionManager.cs @@ -41,11 +41,11 @@ namespace Volo.Abp.Permissions .ToList(); } - public async Task GrantAsync(string providerName, string providerKey, string name) + public async Task GrantAsync(string name, string providerName, string providerKey) { + Check.NotNull(name, nameof(name)); Check.NotNull(providerName, nameof(providerName)); Check.NotNull(providerKey, nameof(providerKey)); - Check.NotNull(name, nameof(name)); if (await IsGrantedAsync(providerName, providerKey, name)) { diff --git a/src/Volo.Abp.Permissions.Web/AbpPermissionsWebAutoMapperProfile.cs b/src/Volo.Abp.Permissions.Web/AbpPermissionsWebAutoMapperProfile.cs new file mode 100644 index 0000000000..717ff30b41 --- /dev/null +++ b/src/Volo.Abp.Permissions.Web/AbpPermissionsWebAutoMapperProfile.cs @@ -0,0 +1,16 @@ +using AutoMapper; + +namespace Volo.Abp.Permissions.Web +{ + public class AbpPermissionsWebAutoMapperProfile : Profile + { + public AbpPermissionsWebAutoMapperProfile() + { + } + + private void CreatePermissionMappings() + { + //... + } + } +} diff --git a/src/Volo.Abp.Permissions.Web/AbpPermissionsWebModule.cs b/src/Volo.Abp.Permissions.Web/AbpPermissionsWebModule.cs new file mode 100644 index 0000000000..73a7d591e9 --- /dev/null +++ b/src/Volo.Abp.Permissions.Web/AbpPermissionsWebModule.cs @@ -0,0 +1,45 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Mvc.Localization; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap; +using Volo.Abp.AutoMapper; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.Permissions.Web.Localization.Resources.AbpPermissions; +using Volo.Abp.VirtualFileSystem; + +namespace Volo.Abp.Permissions.Web +{ + [DependsOn(typeof(AbpPermissionsApplicationContractsModule))] + [DependsOn(typeof(AbpAspNetCoreMvcUiBootstrapModule))] + [DependsOn(typeof(AbpAutoMapperModule))] + public class AbpPermissionsWebModule : AbpModule + { + public override void PreConfigureServices(IServiceCollection services) + { + services.PreConfigure(options => + { + options.AddAssemblyResource(typeof(AbpPermissionsResource)); + }); + } + + public override void ConfigureServices(IServiceCollection services) + { + services.AddAssemblyOf(); + + services.Configure(options => + { + options.FileSets.AddEmbedded("Volo.Abp.Permissions.Web"); + }); + + services.Configure(options => + { + options.Resources.AddVirtualJson("en", "/Localization/Resources/AbpPermissions"); + }); + + services.Configure(options => + { + options.AddProfile(validate: true); + }); + } + } +} diff --git a/src/Volo.Abp.Permissions.Web/Localization/Resources/AbpPermissions/IdentityResource.cs b/src/Volo.Abp.Permissions.Web/Localization/Resources/AbpPermissions/IdentityResource.cs new file mode 100644 index 0000000000..53f714e563 --- /dev/null +++ b/src/Volo.Abp.Permissions.Web/Localization/Resources/AbpPermissions/IdentityResource.cs @@ -0,0 +1,15 @@ +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Localization.Resources.AbpBootstrap; +using Volo.Abp.Localization; +using Volo.Abp.Localization.Resources.AbpValidation; + +namespace Volo.Abp.Permissions.Web.Localization.Resources.AbpPermissions +{ + [InheritResource( + typeof(AbpValidationResource), + typeof(AbpBootstrapResource))] + [ShortLocalizationResourceName("AbpPermissions")] + public class AbpPermissionsResource + { + + } +} diff --git a/src/Volo.Abp.Permissions.Web/Localization/Resources/AbpPermissions/en.json b/src/Volo.Abp.Permissions.Web/Localization/Resources/AbpPermissions/en.json new file mode 100644 index 0000000000..f12cad4212 --- /dev/null +++ b/src/Volo.Abp.Permissions.Web/Localization/Resources/AbpPermissions/en.json @@ -0,0 +1,18 @@ +{ + "culture": "en", + "texts": { + "Users": "Users", + "NewUser": "New user", + "UserName": "User name", + "EmailAddress": "Email address", + "PhoneNumber": "Phone number", + "UserInformations": "User informations", + "Roles": "Roles", + "Password": "Password", + "UserDeletionConfirmationMessage": "User '{0}' will be deleted. Do you confirm that?", + "TwoFactorVerification": "Two factor verification", + "AccountLockoutOnFailedLoginAttempts": "Locking account after failed login attempts", + "NewRole": "New role", + "RoleName": "Role name" + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions.Web/Localization/Resources/AbpPermissions/tr.json b/src/Volo.Abp.Permissions.Web/Localization/Resources/AbpPermissions/tr.json new file mode 100644 index 0000000000..a19ffbcad8 --- /dev/null +++ b/src/Volo.Abp.Permissions.Web/Localization/Resources/AbpPermissions/tr.json @@ -0,0 +1,25 @@ +{ + "culture": "tr", + "texts": { + "Users": "Kullanıcılar", + "NewUser": "Yeni kullanıcı", + "Actions": "İşlemler", + "UserName": "Kullanıcı adı", + "EmailAddress": "E-posta adresi", + "PhoneNumber": "Telefon numarası", + "UserInformations": "Kullanıcı bilgileri", + "Roles": "Roller", + "Close": "Kapat", + "Delete": "Sil", + "Edit": "Düzenle", + "Save": "Kaydet", + "Password": "Şifre", + "UserDeletionConfirmationMessage": "{0} kullanıcısı silinecektir. Onaylıyor musunuz?", + "TwoFactorVerification": "İki aşamalı doğrumala", + "AccountLockoutOnFailedLoginAttempts": "Başarısız giriş denemeleri sonrası hesabı kilitleme", + "NewRole": "Yeni rol", + "RoleName": "Rol adı", + "CreationTime": "Oluşturma zamanı" + + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions.Web/Pages/Permissions/PermissionManagementModal.cshtml b/src/Volo.Abp.Permissions.Web/Pages/Permissions/PermissionManagementModal.cshtml new file mode 100644 index 0000000000..655047716f --- /dev/null +++ b/src/Volo.Abp.Permissions.Web/Pages/Permissions/PermissionManagementModal.cshtml @@ -0,0 +1,30 @@ +@page +@using Volo.Abp.Permissions.Web.Pages.Permissions +@model PermissionManagementModal +@{ + Layout = null; +} + +
+ + + + + + + +
+ + + +
+ +
+ +
+ + + +
+ +
diff --git a/src/Volo.Abp.Permissions.Web/Pages/Permissions/PermissionManagementModal.cshtml.cs b/src/Volo.Abp.Permissions.Web/Pages/Permissions/PermissionManagementModal.cshtml.cs new file mode 100644 index 0000000000..2a743d4038 --- /dev/null +++ b/src/Volo.Abp.Permissions.Web/Pages/Permissions/PermissionManagementModal.cshtml.cs @@ -0,0 +1,33 @@ +using System.ComponentModel.DataAnnotations; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.RazorPages; + +namespace Volo.Abp.Permissions.Web.Pages.Permissions +{ + public class PermissionManagementModal : AbpPageModel + { + [BindProperty] + public PerminssionInfoModel[] Permissions { get; set; } + + public async Task OnGetAsync() + { + + } + + public async Task OnPostAsync() + { + ValidateModel(); + + return NoContent(); + } + + public class PerminssionInfoModel + { + [Required] + //[StringLength(IdentityRoleConsts.MaxNameLength)] + [Display(Name = "RoleName")] + public string Name { get; set; } + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions.Web/Properties/launchSettings.json b/src/Volo.Abp.Permissions.Web/Properties/launchSettings.json new file mode 100644 index 0000000000..8a8ac869ea --- /dev/null +++ b/src/Volo.Abp.Permissions.Web/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:49258/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "Volo.Abp.Permissions.Web": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:49259/" + } + } +} \ No newline at end of file diff --git a/src/Volo.Abp.Permissions.Web/Volo.Abp.Permissions.Web.csproj b/src/Volo.Abp.Permissions.Web/Volo.Abp.Permissions.Web.csproj new file mode 100644 index 0000000000..f5da487b8c --- /dev/null +++ b/src/Volo.Abp.Permissions.Web/Volo.Abp.Permissions.Web.csproj @@ -0,0 +1,30 @@ + + + + + + netstandard2.0 + Volo.Abp.Permissions.Web + Volo.Abp.Permissions.Web + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + Library + + + + + + + + + + + + + + + + + + + + diff --git a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionChecker.cs b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionChecker.cs index 7b48276291..9007faca66 100644 --- a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionChecker.cs +++ b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/IPermissionChecker.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using System.Threading.Tasks; +using System.Threading.Tasks; using JetBrains.Annotations; namespace Volo.Abp.Permissions @@ -7,7 +6,5 @@ namespace Volo.Abp.Permissions public interface IPermissionChecker { Task CheckAsync([NotNull]string name); - - Task> GetAllAsync(); } } \ No newline at end of file diff --git a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionChecker.cs b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionChecker.cs index b0890726b7..542905222a 100644 --- a/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionChecker.cs +++ b/src/Volo.Abp.Permissions/Volo/Abp/Permissions/PermissionChecker.cs @@ -8,7 +8,7 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.Permissions { - public class PermissionChecker : IPermissionChecker, ITransientDependency + public class PermissionChecker : IPermissionChecker, ISingletonDependency { protected IPermissionDefinitionManager PermissionDefinitionManager { get; } @@ -41,19 +41,6 @@ namespace Volo.Abp.Permissions return GetPermissionGrantInfo(permission); } - public virtual async Task> GetAllAsync() - { - var permissionDefinitions = PermissionDefinitionManager.GetAll(); - var permissionGrantInfos = new Dictionary(); - - foreach (var permission in permissionDefinitions) - { - permissionGrantInfos[permission.Name] = await GetPermissionGrantInfo(permission); - } - - return permissionGrantInfos.Values.ToList(); - } - protected virtual async Task GetPermissionGrantInfo(PermissionDefinition permission) { foreach (var provider in Providers) diff --git a/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_User_Tests.cs b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_User_Tests.cs index d7873314b9..886e8d1441 100644 --- a/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_User_Tests.cs +++ b/test/Volo.Abp.Permissions.Tests/Volo/Abp/Permissions/PermissionManager_User_Tests.cs @@ -86,22 +86,6 @@ namespace Volo.Abp.Permissions // permission.ShouldContain(p => p.Name == "MyPermission1" && !p.IsGranted); //} - [Fact] - public async Task Should_Get_List_Of_Granted_Permissions_For_Current_User() - { - //User1 - _currentUserId = PermissionTestDataBuilder.User1Id; - var permission = await _permissionChecker.GetAllAsync(); - permission.Count.ShouldBeGreaterThan(0); - permission.ShouldContain(p => p.Name == "MyPermission1" && p.IsGranted && p.ProviderName == UserPermissionValueProvider.ProviderName); - - //User2 - _currentUserId = PermissionTestDataBuilder.User2Id; - permission = await _permissionChecker.GetAllAsync(); - permission.Count.ShouldBeGreaterThan(0); - permission.ShouldContain(p => p.Name == "MyPermission1" && !p.IsGranted); - } - //[Fact] //public async Task Should_Grant_Permission_For_A_User() //{