From 2c70fb780ee787666ad1ed91ee190ac866ea51ce Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 25 Feb 2019 13:53:47 +0300 Subject: [PATCH 01/20] Tag helpers: required-symbol option is enabled for select & input tag helpers --- .../TagHelpers/Form/AbpInputTagHelper.cs | 2 +- .../TagHelpers/Form/AbpSelectTagHelper.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelper.cs index 0c5ac5dd22..10ce263032 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelper.cs @@ -23,7 +23,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form public AbpFormControlSize Size { get; set; } = AbpFormControlSize.Default; - [HtmlAttributeNotBound] + [HtmlAttributeName("required-symbol")] public bool DisplayRequiredSymbol { get; set; } = true; [HtmlAttributeNotBound] diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs index f8cdd35a7e..ae46336f77 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelper.cs @@ -18,7 +18,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form [HtmlAttributeName("info")] public string InfoText { get; set; } - [HtmlAttributeNotBound] + [HtmlAttributeName("required-symbol")] public bool DisplayRequiredSymbol { get; set; } = true; [HtmlAttributeNotBound] From 2297033263e37463a41759556e1718087d29265b Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Mon, 25 Feb 2019 17:30:20 +0300 Subject: [PATCH 02/20] Added HasExtraPropertiesExtensions.RemoveProperty and tests. --- .../Abp/Data/HasExtraPropertiesExtensions.cs | 7 ++++ .../HasExtraPropertiesExtensions_Tests.cs | 33 +++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/HasExtraPropertiesExtensions_Tests.cs diff --git a/framework/src/Volo.Abp.Data/Volo/Abp/Data/HasExtraPropertiesExtensions.cs b/framework/src/Volo.Abp.Data/Volo/Abp/Data/HasExtraPropertiesExtensions.cs index a16373eedc..15915cc94b 100644 --- a/framework/src/Volo.Abp.Data/Volo/Abp/Data/HasExtraPropertiesExtensions.cs +++ b/framework/src/Volo.Abp.Data/Volo/Abp/Data/HasExtraPropertiesExtensions.cs @@ -39,5 +39,12 @@ namespace Volo.Abp.Data source.ExtraProperties[name] = value; return source; } + + public static TSource RemoveProperty(this TSource source, string name) + where TSource : IHasExtraProperties + { + source.ExtraProperties.Remove(name); + return source; + } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/HasExtraPropertiesExtensions_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/HasExtraPropertiesExtensions_Tests.cs new file mode 100644 index 0000000000..cc80c24bc0 --- /dev/null +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/HasExtraPropertiesExtensions_Tests.cs @@ -0,0 +1,33 @@ +using System; +using Shouldly; +using Volo.Abp.Data; +using Volo.Abp.TestApp.Domain; +using Xunit; + +namespace Volo.Abp.TestApp.Testing +{ + public class HasExtraPropertiesExtensions_Tests + { + [Fact] + public void Basic_Tests() + { + var city = new City(Guid.NewGuid(), "Adana"); + + city.HasProperty("UnknownProperty").ShouldBeFalse(); + city.GetProperty("UnknownProperty").ShouldBeNull(); + city.GetProperty("UnknownProperty").ShouldBe(0); + + city.SetProperty("IsHot", true); + city.HasProperty("IsHot").ShouldBeTrue(); + city.GetProperty("IsHot").ShouldBeTrue(); + + city.SetProperty("IsHot", false); + city.HasProperty("IsHot").ShouldBeTrue(); + city.GetProperty("IsHot").ShouldBeFalse(); + + city.RemoveProperty("IsHot"); + city.HasProperty("IsHot").ShouldBeFalse(); + city.GetProperty("IsHot").ShouldBeFalse(); + } + } +} \ No newline at end of file From 935b567bff754b5846b9c82506c08fb75a4274a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arma=C4=9Fan=20=C3=9Cnl=C3=BC?= <36102404+armgnunlu@users.noreply.github.com> Date: Tue, 26 Feb 2019 14:34:18 +0300 Subject: [PATCH 03/20] settings - permissions abp --- .../PermissionManagementModal.cshtml | 17 ++------- .../Pages/SettingManagement/Index.cshtml | 37 +++++++++---------- 2 files changed, 20 insertions(+), 34 deletions(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml index 16133d88e2..beb39387b8 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml @@ -9,15 +9,9 @@ Layout = null; }
- - - - - - + - @@ -25,8 +19,7 @@ {

@Model.Groups[i].DisplayName

-

Permissions for "@Model.EntityDisplayName".

-
+
@for (var j = 0; j < Model.Groups[i].Permissions.Count; j++) { @@ -41,11 +34,7 @@
}
-
- -
- -
+ \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml index 0e7a9a70bf..c14c416a36 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml @@ -14,24 +14,21 @@ } - - - - - @*@L["Settings"]*@Settings - - - - - - @foreach (var group in Model.SettingPageCreationContext.Groups) - { - +
+ + -

@group.DisplayName

- @await Component.InvokeAsync(group.ComponentType) - - } - -
-
\ No newline at end of file + + @foreach (var group in Model.SettingPageCreationContext.Groups) + { + + +

@group.DisplayName

+
+ @await Component.InvokeAsync(group.ComponentType) +
+ } +
+ + +
\ No newline at end of file From c6499934051f0689580accb1a160b2f5a1acf666 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Tue, 26 Feb 2019 14:38:11 +0300 Subject: [PATCH 04/20] Removed MvcRazorCompileOnPublish from csproj files --- abp_io/src/Volo.AbpWebSite.Web/Volo.AbpWebSite.Web.csproj | 2 +- .../Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj | 2 +- .../applications/AuthServer.Host/AuthServer.Host.csproj | 2 +- .../BackendAdminApp.Host/BackendAdminApp.Host.csproj | 2 +- .../applications/PublicWebSite.Host/PublicWebSite.Host.csproj | 2 +- .../BackendAdminAppGateway.Host.csproj | 2 +- .../gateways/InternalGateway.Host/InternalGateway.Host.csproj | 2 +- .../PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj | 2 +- .../BloggingService.Host/BloggingService.Host.csproj | 2 +- .../IdentityService.Host/IdentityService.Host.csproj | 2 +- .../ProductService.Host/ProductService.Host.csproj | 2 +- .../MyCompanyName.MyProjectName.Web.csproj | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/abp_io/src/Volo.AbpWebSite.Web/Volo.AbpWebSite.Web.csproj b/abp_io/src/Volo.AbpWebSite.Web/Volo.AbpWebSite.Web.csproj index 3da9740a64..b434646d99 100644 --- a/abp_io/src/Volo.AbpWebSite.Web/Volo.AbpWebSite.Web.csproj +++ b/abp_io/src/Volo.AbpWebSite.Web/Volo.AbpWebSite.Web.csproj @@ -9,7 +9,7 @@ true true false - false + c140514f-e488-4c99-8b9a-fabee0f53ce0 diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj index b5785b5719..3b6d429dd0 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.csproj @@ -13,7 +13,7 @@ true true false - false + diff --git a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj index 80b6af37db..0b938960f5 100644 --- a/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj +++ b/samples/MicroserviceDemo/applications/AuthServer.Host/AuthServer.Host.csproj @@ -8,7 +8,7 @@ true true false - false + diff --git a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj index 3f460e396c..d2f0d16257 100644 --- a/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj +++ b/samples/MicroserviceDemo/applications/BackendAdminApp.Host/BackendAdminApp.Host.csproj @@ -8,7 +8,7 @@ true true false - false + diff --git a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj index e8164930d8..158e41f576 100644 --- a/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj +++ b/samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSite.Host.csproj @@ -8,7 +8,7 @@ true true false - false + diff --git a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj index 09c6cb00bb..28bb533c46 100644 --- a/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/BackendAdminAppGateway.Host.csproj @@ -8,7 +8,7 @@ true true false - false + diff --git a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj index 1c53be6609..dafa931f24 100644 --- a/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/InternalGateway.Host/InternalGateway.Host.csproj @@ -8,7 +8,7 @@ true true false - false + diff --git a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj index df3c1900fa..c04e6bdfaa 100644 --- a/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj +++ b/samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/PublicWebSiteGateway.Host.csproj @@ -8,7 +8,7 @@ true true false - false + diff --git a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj index 7738612f19..88671a50f4 100644 --- a/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/BloggingService.Host/BloggingService.Host.csproj @@ -8,7 +8,7 @@ true true false - false + diff --git a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj index 7ac25fc77f..810c69a198 100644 --- a/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/IdentityService.Host/IdentityService.Host.csproj @@ -8,7 +8,7 @@ true true false - false + diff --git a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj index 4cb4bc58e6..ce42a3f22e 100644 --- a/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj +++ b/samples/MicroserviceDemo/microservices/ProductService.Host/ProductService.Host.csproj @@ -8,7 +8,7 @@ true true false - false + diff --git a/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj b/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj index 0bf43b222e..846b262f32 100644 --- a/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj +++ b/templates/mvc/src/MyCompanyName.MyProjectName.Web/MyCompanyName.MyProjectName.Web.csproj @@ -9,7 +9,7 @@ true true false - false + From af367d60db65ac8d09b9892cd05b223ae1632ab0 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 27 Feb 2019 09:53:38 +0300 Subject: [PATCH 05/20] Added IsFeature to PermissionDefinition --- .../Permissions/PermissionDefinition.cs | 20 +++++++++++++++---- .../Permissions/PermissionGroupDefinition.cs | 11 +++++++--- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs index bb23757de5..ce81f4e00d 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs @@ -22,7 +22,12 @@ namespace Volo.Abp.Authorization.Permissions /// A list of allowed providers to get/set value of this permission. /// An empty list indicates that all providers are allowed. /// - public List Providers { get; } + public List Providers { get; } //TODO: Rename to AllowedProviders? + + /// + /// Used to mark this permission as also a feature of the application. + /// + public bool IsFeature { get; set; } public ILocalizableString DisplayName { @@ -53,19 +58,26 @@ namespace Volo.Abp.Authorization.Permissions set => Properties[name] = value; } - protected internal PermissionDefinition([NotNull] string name, ILocalizableString displayName = null) + protected internal PermissionDefinition( + [NotNull] string name, + ILocalizableString displayName = null, + bool isFeature = false) { Name = Check.NotNull(name, nameof(name)); DisplayName = displayName ?? new FixedLocalizableString(name); + IsFeature = isFeature; Properties = new Dictionary(); Providers = new List(); _children = new List(); } - public virtual PermissionDefinition AddChild([NotNull] string name, ILocalizableString displayName = null) + public virtual PermissionDefinition AddChild( + [NotNull] string name, + ILocalizableString displayName = null, + bool isFeature = false) { - var child = new PermissionDefinition(name, displayName) + var child = new PermissionDefinition(name, displayName, isFeature) { Parent = this }; diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs index a52bd4f601..c4fe93e739 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs @@ -37,7 +37,9 @@ namespace Volo.Abp.Authorization.Permissions set => Properties[name] = value; } - protected internal PermissionGroupDefinition(string name, ILocalizableString displayName = null) + protected internal PermissionGroupDefinition( + string name, + ILocalizableString displayName = null) { Name = name; DisplayName = displayName ?? new FixedLocalizableString(Name); @@ -46,9 +48,12 @@ namespace Volo.Abp.Authorization.Permissions _permissions = new List(); } - public virtual PermissionDefinition AddPermission(string name, ILocalizableString displayName = null) + public virtual PermissionDefinition AddPermission( + string name, + ILocalizableString displayName = null, + bool isFeature = false) { - var permission = new PermissionDefinition(name, displayName); + var permission = new PermissionDefinition(name, displayName, isFeature); _permissions.Add(permission); From 79da56dd1329d22c11741cbbddd9e336f2214483 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 27 Feb 2019 10:48:38 +0300 Subject: [PATCH 06/20] Simplify permission value providers. --- .../Mvc/Client/RemotePermissionChecker.cs | 12 +++++------ .../AlwaysAllowPermissionChecker.cs | 9 +++++---- .../ClientPermissionValueProvider.cs | 13 +++++------- .../Permissions/IPermissionChecker.cs | 4 ++-- .../Permissions/IPermissionValueProvider.cs | 3 ++- .../Permissions/PermissionChecker.cs | 20 +++++++++++++------ .../PermissionCheckerExtensions.cs | 20 ------------------- .../Permissions/PermissionGrantResult.cs | 9 +++++++++ .../Permissions/PermissionValueProvider.cs | 2 +- .../RolePermissionValueProvider.cs | 8 ++++---- .../UserPermissionValueProvider.cs | 13 +++++------- .../Volo/Abp/Threading/TaskCache.cs | 16 +++++++++++++++ .../Volo.Abp.MultiTenancy.Abstractions.csproj | 3 +-- .../AbpMultiTenancyAbstractionsModule.cs | 6 ++++-- .../PermissionValueProviderGrantInfo.cs | 4 ++-- 15 files changed, 75 insertions(+), 67 deletions(-) delete mode 100644 framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionCheckerExtensions.cs create mode 100644 framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGrantResult.cs create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Threading/TaskCache.cs rename {framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions => modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement}/PermissionValueProviderGrantInfo.cs (78%) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemotePermissionChecker.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemotePermissionChecker.cs index 46e13bcc3d..cbddb7c3c7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemotePermissionChecker.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/RemotePermissionChecker.cs @@ -14,19 +14,17 @@ namespace Volo.Abp.AspNetCore.Mvc.Client ConfigurationClient = configurationClient; } - public async Task CheckAsync(string name) + public async Task IsGrantedAsync(string name) { var configuration = await ConfigurationClient.GetAsync(); - return new PermissionGrantInfo( - name, - configuration.Auth.GrantedPolicies.ContainsKey(name) - ); + return configuration.Auth.GrantedPolicies.ContainsKey(name); } - public Task CheckAsync(ClaimsPrincipal claimsPrincipal, string name) + public Task IsGrantedAsync(ClaimsPrincipal claimsPrincipal, string name) { - return CheckAsync(name); + /* This provider always works for the current principal. */ + return IsGrantedAsync(name); } } } diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/AlwaysAllowPermissionChecker.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/AlwaysAllowPermissionChecker.cs index 77c8f4b665..e3f4425289 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/AlwaysAllowPermissionChecker.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/AlwaysAllowPermissionChecker.cs @@ -1,5 +1,6 @@ using System.Security.Claims; using System.Threading.Tasks; +using Volo.Abp.Threading; namespace Volo.Abp.Authorization.Permissions { @@ -11,14 +12,14 @@ namespace Volo.Abp.Authorization.Permissions /// public class AlwaysAllowPermissionChecker : IPermissionChecker { - public Task CheckAsync(string name) + public Task IsGrantedAsync(string name) { - return Task.FromResult(new PermissionGrantInfo(name, true, "AlwaysAllow")); + return TaskCache.TrueResult; } - public Task CheckAsync(ClaimsPrincipal claimsPrincipal, string name) + public Task IsGrantedAsync(ClaimsPrincipal claimsPrincipal, string name) { - return Task.FromResult(new PermissionGrantInfo(name, true, "AlwaysAllow")); + return TaskCache.TrueResult; } } } diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs index b9eac0bab0..87b391443d 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/ClientPermissionValueProvider.cs @@ -15,21 +15,18 @@ namespace Volo.Abp.Authorization.Permissions } - public override async Task CheckAsync(PermissionValueCheckContext context) + public override async Task CheckAsync(PermissionValueCheckContext context) { var clientId = context.Principal?.FindFirst(AbpClaimTypes.ClientId)?.Value; if (clientId == null) { - return PermissionValueProviderGrantInfo.NonGranted; + return PermissionGrantResult.Undefined; } - if (await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, clientId)) - { - return new PermissionValueProviderGrantInfo(true, clientId); - } - - return PermissionValueProviderGrantInfo.NonGranted; + return await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, clientId) + ? PermissionGrantResult.Granted + : PermissionGrantResult.Undefined; } } } diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionChecker.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionChecker.cs index 833e09281c..b394a29f52 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionChecker.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionChecker.cs @@ -6,8 +6,8 @@ namespace Volo.Abp.Authorization.Permissions { public interface IPermissionChecker { - Task CheckAsync([NotNull]string name); + Task IsGrantedAsync([NotNull]string name); - Task CheckAsync([CanBeNull] ClaimsPrincipal claimsPrincipal, [NotNull]string name); + Task IsGrantedAsync([CanBeNull] ClaimsPrincipal claimsPrincipal, [NotNull]string name); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionValueProvider.cs index 73ba3bfd17..bf19132e23 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/IPermissionValueProvider.cs @@ -7,6 +7,7 @@ namespace Volo.Abp.Authorization.Permissions { string Name { get; } - Task CheckAsync(PermissionValueCheckContext context); + //TODO: Rename to GetResult? (CheckAsync throws exception by naming convention) + Task CheckAsync(PermissionValueCheckContext context); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs index 7113571c16..624ed75146 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs @@ -41,12 +41,12 @@ namespace Volo.Abp.Authorization.Permissions ); } - public virtual Task CheckAsync(string name) + public virtual Task IsGrantedAsync(string name) { - return CheckAsync(PrincipalAccessor.Principal, name); + return IsGrantedAsync(PrincipalAccessor.Principal, name); } - public virtual async Task CheckAsync(ClaimsPrincipal claimsPrincipal, string name) + public virtual async Task IsGrantedAsync(ClaimsPrincipal claimsPrincipal, string name) { Check.NotNull(name, nameof(name)); @@ -55,6 +55,8 @@ namespace Volo.Abp.Authorization.Permissions claimsPrincipal ); + var isGranted = false; + foreach (var provider in ValueProviders) { if (context.Permission.Providers.Any() && @@ -64,13 +66,19 @@ namespace Volo.Abp.Authorization.Permissions } var result = await provider.CheckAsync(context); - if (result.IsGranted) + + if (result == PermissionGrantResult.Granted) + { + isGranted = true; + } + else if (result == PermissionGrantResult.Prohibited) { - return new PermissionGrantInfo(context.Permission.Name, true, provider.Name, result.ProviderKey); + isGranted = true; + break; } } - return new PermissionGrantInfo(context.Permission.Name, false); + return isGranted; } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionCheckerExtensions.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionCheckerExtensions.cs deleted file mode 100644 index f9891862ff..0000000000 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionCheckerExtensions.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Security.Claims; -using System.Threading.Tasks; - -namespace Volo.Abp.Authorization.Permissions -{ - public static class PermissionCheckerExtensions - { - public static async Task IsGrantedAsync(this IPermissionChecker permissionChecker, string name) - { - return (await permissionChecker.CheckAsync(name)).IsGranted; - } - - public static async Task IsGrantedAsync(this IPermissionChecker permissionChecker, ClaimsPrincipal principal, string name) - { - return (await permissionChecker.CheckAsync(principal, name)).IsGranted; - } - - //TODO: Add sync extensions - } -} diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGrantResult.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGrantResult.cs new file mode 100644 index 0000000000..0b8b23e426 --- /dev/null +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGrantResult.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.Authorization.Permissions +{ + public enum PermissionGrantResult + { + Undefined, + Granted, + Prohibited + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProvider.cs index 066d876637..914bd4af34 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProvider.cs @@ -13,6 +13,6 @@ namespace Volo.Abp.Authorization.Permissions PermissionStore = permissionStore; } - public abstract Task CheckAsync(PermissionValueCheckContext context); + public abstract Task CheckAsync(PermissionValueCheckContext context); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs index 1d200ac49a..a008190fbd 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/RolePermissionValueProvider.cs @@ -16,23 +16,23 @@ namespace Volo.Abp.Authorization.Permissions } - public override async Task CheckAsync(PermissionValueCheckContext context) + public override async Task CheckAsync(PermissionValueCheckContext context) { var roles = context.Principal?.FindAll(AbpClaimTypes.Role).Select(c => c.Value).ToArray(); if (roles == null || !roles.Any()) { - return PermissionValueProviderGrantInfo.NonGranted; + return PermissionGrantResult.Undefined; } foreach (var role in roles) { if (await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, role)) { - return new PermissionValueProviderGrantInfo(true, role); + return PermissionGrantResult.Granted; } } - return PermissionValueProviderGrantInfo.NonGranted; + return PermissionGrantResult.Undefined; } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs index 9f6022907e..f04a85910f 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/UserPermissionValueProvider.cs @@ -15,21 +15,18 @@ namespace Volo.Abp.Authorization.Permissions } - public override async Task CheckAsync(PermissionValueCheckContext context) + public override async Task CheckAsync(PermissionValueCheckContext context) { var userId = context.Principal?.FindFirst(AbpClaimTypes.UserId)?.Value; if (userId == null) { - return PermissionValueProviderGrantInfo.NonGranted; + return PermissionGrantResult.Undefined; } - if (await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, userId)) - { - return new PermissionValueProviderGrantInfo(true, userId); - } - - return PermissionValueProviderGrantInfo.NonGranted; + return await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, userId) + ? PermissionGrantResult.Granted + : PermissionGrantResult.Undefined; } } } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Threading/TaskCache.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Threading/TaskCache.cs new file mode 100644 index 0000000000..0cb57ca0c5 --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Threading/TaskCache.cs @@ -0,0 +1,16 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.Threading +{ + public static class TaskCache + { + public static Task TrueResult { get; } + public static Task FalseResult { get; } + + static TaskCache() + { + TrueResult = Task.FromResult(true); + FalseResult = Task.FromResult(false); + } + } +} diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj index 05291caa45..686edb7720 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj @@ -14,9 +14,8 @@ - + - diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs index 58de6cdb99..6b21f53443 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs @@ -1,10 +1,12 @@ -using Volo.Abp.Data; +using Volo.Abp.Authorization; +using Volo.Abp.Data; using Volo.Abp.Modularity; namespace Volo.Abp.MultiTenancy { [DependsOn( - typeof(AbpDataModule) + typeof(AbpDataModule), + typeof(AbpAuthorizationModule) )] public class AbpMultiTenancyAbstractionsModule : AbpModule //TODO: Rename to AbpMultiTenancyModule? { diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProviderGrantInfo.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionValueProviderGrantInfo.cs similarity index 78% rename from framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProviderGrantInfo.cs rename to modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionValueProviderGrantInfo.cs index 3c1fc47799..bf3265643d 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueProviderGrantInfo.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionValueProviderGrantInfo.cs @@ -1,8 +1,8 @@ using JetBrains.Annotations; -namespace Volo.Abp.Authorization.Permissions +namespace Volo.Abp.PermissionManagement { - public class PermissionValueProviderGrantInfo + public class PermissionValueProviderGrantInfo //TODO: Rename to PermissionGrantInfo { public static PermissionValueProviderGrantInfo NonGranted { get; } = new PermissionValueProviderGrantInfo(false); From 3565c2824d21b45908d5b9e96150a9e0e3995806 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 27 Feb 2019 11:20:36 +0300 Subject: [PATCH 07/20] Define TenantPermissionValueProvider --- .../Permissions/NullPermissionStore.cs | 3 +- .../PermissionValueCheckContext.cs | 4 +- .../AbpMultiTenancyAbstractionsModule.cs | 9 +++- .../TenantPermissionValueProvider.cs | 45 +++++++++++++++++++ 4 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantPermissionValueProvider.cs diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/NullPermissionStore.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/NullPermissionStore.cs index b5c5cb5a4b..57c76ac6c9 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/NullPermissionStore.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/NullPermissionStore.cs @@ -2,6 +2,7 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.DependencyInjection; +using Volo.Abp.Threading; namespace Volo.Abp.Authorization.Permissions { @@ -16,7 +17,7 @@ namespace Volo.Abp.Authorization.Permissions public Task IsGrantedAsync(string name, string providerName, string providerKey) { - return Task.FromResult(false); + return TaskCache.FalseResult; } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueCheckContext.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueCheckContext.cs index 83602a0c46..bc39384938 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueCheckContext.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionValueCheckContext.cs @@ -11,7 +11,9 @@ namespace Volo.Abp.Authorization.Permissions [CanBeNull] public ClaimsPrincipal Principal { get; } - public PermissionValueCheckContext([NotNull] PermissionDefinition permission, [CanBeNull] ClaimsPrincipal principal) + public PermissionValueCheckContext( + [NotNull] PermissionDefinition permission, + [CanBeNull] ClaimsPrincipal principal) { Check.NotNull(permission, nameof(permission)); diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs index 6b21f53443..1b72b7d292 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs @@ -1,4 +1,5 @@ using Volo.Abp.Authorization; +using Volo.Abp.Authorization.Permissions; using Volo.Abp.Data; using Volo.Abp.Modularity; @@ -10,6 +11,12 @@ namespace Volo.Abp.MultiTenancy )] public class AbpMultiTenancyAbstractionsModule : AbpModule //TODO: Rename to AbpMultiTenancyModule? { - + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.ValueProviders.Add(); + }); + } } } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantPermissionValueProvider.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantPermissionValueProvider.cs new file mode 100644 index 0000000000..94bd018823 --- /dev/null +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantPermissionValueProvider.cs @@ -0,0 +1,45 @@ +using System.Threading.Tasks; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Security.Claims; + +namespace Volo.Abp.MultiTenancy +{ + public class TenantPermissionValueProvider : PermissionValueProvider + { + public const string ProviderName = "Tenant"; + + public override string Name => ProviderName; + + protected ICurrentTenant CurrentTenant { get; } + + public TenantPermissionValueProvider( + IPermissionStore permissionStore, + ICurrentTenant currentTenant) + : base(permissionStore) + { + CurrentTenant = currentTenant; + } + + public override async Task CheckAsync(PermissionValueCheckContext context) + { + if (!context.Permission.IsFeature) + { + return PermissionGrantResult.Undefined; + } + + var tenantId = context.Principal?.FindFirst(AbpClaimTypes.TenantId)?.Value; + + if (tenantId == null) + { + return PermissionGrantResult.Undefined; + } + + using (CurrentTenant.Change(null)) + { + return await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, tenantId) + ? PermissionGrantResult.Granted + : PermissionGrantResult.Undefined; + } + } + } +} From fcaa7058414472af3af6bf0322e92c4e1b6b2824 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 27 Feb 2019 11:23:16 +0300 Subject: [PATCH 08/20] Fix PermissionChecker --- .../Volo/Abp/Authorization/Permissions/PermissionChecker.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs index 624ed75146..d69ac81e78 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionChecker.cs @@ -73,8 +73,7 @@ namespace Volo.Abp.Authorization.Permissions } else if (result == PermissionGrantResult.Prohibited) { - isGranted = true; - break; + return false; } } From 2b403ada8ba88c03da15d27f80cb57f97d800cc7 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 27 Feb 2019 11:49:36 +0300 Subject: [PATCH 09/20] Remove tenant permission provider --- .../Permissions/PermissionDefinition.cs | 14 ++---- .../Permissions/PermissionGroupDefinition.cs | 5 +-- .../AbpMultiTenancyAbstractionsModule.cs | 9 +--- .../TenantPermissionValueProvider.cs | 45 ------------------- 4 files changed, 6 insertions(+), 67 deletions(-) delete mode 100644 framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantPermissionValueProvider.cs diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs index ce81f4e00d..de4ca1221f 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionDefinition.cs @@ -24,11 +24,6 @@ namespace Volo.Abp.Authorization.Permissions /// public List Providers { get; } //TODO: Rename to AllowedProviders? - /// - /// Used to mark this permission as also a feature of the application. - /// - public bool IsFeature { get; set; } - public ILocalizableString DisplayName { get => _displayName; @@ -60,12 +55,10 @@ namespace Volo.Abp.Authorization.Permissions protected internal PermissionDefinition( [NotNull] string name, - ILocalizableString displayName = null, - bool isFeature = false) + ILocalizableString displayName = null) { Name = Check.NotNull(name, nameof(name)); DisplayName = displayName ?? new FixedLocalizableString(name); - IsFeature = isFeature; Properties = new Dictionary(); Providers = new List(); @@ -74,10 +67,9 @@ namespace Volo.Abp.Authorization.Permissions public virtual PermissionDefinition AddChild( [NotNull] string name, - ILocalizableString displayName = null, - bool isFeature = false) + ILocalizableString displayName = null) { - var child = new PermissionDefinition(name, displayName, isFeature) + var child = new PermissionDefinition(name, displayName) { Parent = this }; diff --git a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs index c4fe93e739..623db24c8a 100644 --- a/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs +++ b/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/PermissionGroupDefinition.cs @@ -50,10 +50,9 @@ namespace Volo.Abp.Authorization.Permissions public virtual PermissionDefinition AddPermission( string name, - ILocalizableString displayName = null, - bool isFeature = false) + ILocalizableString displayName = null) { - var permission = new PermissionDefinition(name, displayName, isFeature); + var permission = new PermissionDefinition(name, displayName); _permissions.Add(permission); diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs index 1b72b7d292..6b21f53443 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs @@ -1,5 +1,4 @@ using Volo.Abp.Authorization; -using Volo.Abp.Authorization.Permissions; using Volo.Abp.Data; using Volo.Abp.Modularity; @@ -11,12 +10,6 @@ namespace Volo.Abp.MultiTenancy )] public class AbpMultiTenancyAbstractionsModule : AbpModule //TODO: Rename to AbpMultiTenancyModule? { - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - options.ValueProviders.Add(); - }); - } + } } diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantPermissionValueProvider.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantPermissionValueProvider.cs deleted file mode 100644 index 94bd018823..0000000000 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/TenantPermissionValueProvider.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Authorization.Permissions; -using Volo.Abp.Security.Claims; - -namespace Volo.Abp.MultiTenancy -{ - public class TenantPermissionValueProvider : PermissionValueProvider - { - public const string ProviderName = "Tenant"; - - public override string Name => ProviderName; - - protected ICurrentTenant CurrentTenant { get; } - - public TenantPermissionValueProvider( - IPermissionStore permissionStore, - ICurrentTenant currentTenant) - : base(permissionStore) - { - CurrentTenant = currentTenant; - } - - public override async Task CheckAsync(PermissionValueCheckContext context) - { - if (!context.Permission.IsFeature) - { - return PermissionGrantResult.Undefined; - } - - var tenantId = context.Principal?.FindFirst(AbpClaimTypes.TenantId)?.Value; - - if (tenantId == null) - { - return PermissionGrantResult.Undefined; - } - - using (CurrentTenant.Change(null)) - { - return await PermissionStore.IsGrantedAsync(context.Permission.Name, Name, tenantId) - ? PermissionGrantResult.Granted - : PermissionGrantResult.Undefined; - } - } - } -} From 9c0a22d1bf07a5ed6c5294cdd3b149c519a492ad Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 27 Feb 2019 11:53:41 +0300 Subject: [PATCH 10/20] Added AbpSecurityModule. --- .../Volo.Abp.MultiTenancy.Abstractions.csproj | 2 +- .../Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj index 686edb7720..18660be71e 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo.Abp.MultiTenancy.Abstractions.csproj @@ -14,8 +14,8 @@ - + diff --git a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs index 6b21f53443..5d33034993 100644 --- a/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs +++ b/framework/src/Volo.Abp.MultiTenancy.Abstractions/Volo/Abp/MultiTenancy/AbpMultiTenancyAbstractionsModule.cs @@ -1,12 +1,12 @@ -using Volo.Abp.Authorization; -using Volo.Abp.Data; +using Volo.Abp.Data; using Volo.Abp.Modularity; +using Volo.Abp.Security; namespace Volo.Abp.MultiTenancy { [DependsOn( typeof(AbpDataModule), - typeof(AbpAuthorizationModule) + typeof(AbpSecurityModule) )] public class AbpMultiTenancyAbstractionsModule : AbpModule //TODO: Rename to AbpMultiTenancyModule? { From 15f562795d4088ba7fb037c5c4511c8418951266 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 27 Feb 2019 14:12:33 +0300 Subject: [PATCH 11/20] Update SettingDefinition.cs --- .../Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs index 9f02389248..127c724dc1 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/SettingDefinition.cs @@ -40,7 +40,7 @@ namespace Volo.Abp.Settings /// A list of allowed providers to get/set value of this setting. /// An empty list indicates that all providers are allowed. /// - public List Providers { get; } + public List Providers { get; } //TODO: Rename to AllowedProviders /// /// Is this setting inherited from parent scopes. From 4a1828cb2a7769d6a21ed89eb873436f6a90e215 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 27 Feb 2019 15:51:18 +0300 Subject: [PATCH 12/20] Updated microservice diagam --- docs/en/Samples/Microservice-Demo.md | 4 ++-- .../images/microservice-sample-diagram-2.png | Bin 0 -> 158215 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 docs/en/images/microservice-sample-diagram-2.png diff --git a/docs/en/Samples/Microservice-Demo.md b/docs/en/Samples/Microservice-Demo.md index fcedcd0f89..b0ee6cc1c4 100644 --- a/docs/en/Samples/Microservice-Demo.md +++ b/docs/en/Samples/Microservice-Demo.md @@ -24,7 +24,7 @@ This sample aims to demonstrate a simple yet complete microservice solution; The diagram below shows the system: -![microservice-sample-diagram](../images/microservice-sample-diagram.png) +![microservice-sample-diagram-2](../images/microservice-sample-diagram-2.png) ### Source Code @@ -32,7 +32,7 @@ You can get the source code from [the GitHub repository](https://github.com/abpf ### Status -This sample is still in development, not completed yet. +Initial version of this sample has been completed. Additional improvement are still in development. ## Running the Solution diff --git a/docs/en/images/microservice-sample-diagram-2.png b/docs/en/images/microservice-sample-diagram-2.png new file mode 100644 index 0000000000000000000000000000000000000000..17aea07098fdb739c548265f30e2f540a88912f6 GIT binary patch literal 158215 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 gZXW+1-?c%ZE~JsQQtX+`K33zs;?X#fBK literal 0 HcmV?d00001 From 1ec272de0d7c491bc2ef2fdaa34f5ccf08a7dc43 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 27 Feb 2019 16:27:52 +0300 Subject: [PATCH 13/20] Added flag-icon-css package --- .../FlagIconCss/FlagIconCssStyleContributor.cs | 13 +++++++++++++ npm/packs/flag-icon-css/abp.resourcemapping.js | 6 ++++++ npm/packs/flag-icon-css/package.json | 10 ++++++++++ 3 files changed, 29 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/FlagIconCss/FlagIconCssStyleContributor.cs create mode 100644 npm/packs/flag-icon-css/abp.resourcemapping.js create mode 100644 npm/packs/flag-icon-css/package.json diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/FlagIconCss/FlagIconCssStyleContributor.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/FlagIconCss/FlagIconCssStyleContributor.cs new file mode 100644 index 0000000000..ed82ed7f62 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Packages/Volo/Abp/AspNetCore/Mvc/UI/Packages/FlagIconCss/FlagIconCssStyleContributor.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Packages.FlagIconCss +{ + public class FlagIconCssStyleContributor : BundleContributor + { + public override void ConfigureBundle(BundleConfigurationContext context) + { + context.Files.AddIfNotContains("/libs/flag-icon-css/css/flag-icon.min.css"); + } + } +} diff --git a/npm/packs/flag-icon-css/abp.resourcemapping.js b/npm/packs/flag-icon-css/abp.resourcemapping.js new file mode 100644 index 0000000000..bd26d124f5 --- /dev/null +++ b/npm/packs/flag-icon-css/abp.resourcemapping.js @@ -0,0 +1,6 @@ +module.exports = { + mappings: { + "@node_modules/flag-icon-css/css/*": "@libs/flag-icon-css/css", + "@node_modules/flag-icon-css/flags/1x1/*": "@libs/flag-icon-css/flags/1x1" + } +} \ No newline at end of file diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json new file mode 100644 index 0000000000..8c185ac19f --- /dev/null +++ b/npm/packs/flag-icon-css/package.json @@ -0,0 +1,10 @@ +{ + "version": "0.5.1", + "name": "@abp/flag-icon-css", + "publishConfig": { + "access": "public" + }, + "dependencies": { + "flag-icon-css": "^3.3.0" + } +} From 17b735fbd576eb641c0a1ff037c9d4d0a9b7e830 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 27 Feb 2019 16:31:26 +0300 Subject: [PATCH 14/20] Increment package version --- npm/lerna.json | 2 +- npm/packs/flag-icon-css/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/lerna.json b/npm/lerna.json index 7d85235b1a..ce492f2519 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "0.5.1", + "version": "0.5.2", "packages": [ "packs/*" ], diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json index 8c185ac19f..9a151e3b41 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "0.5.1", + "version": "0.5.2", "name": "@abp/flag-icon-css", "publishConfig": { "access": "public" From 4638c6b980eb823abddf556885ab304b4e268040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Atakan=20=C3=96zceviz?= Date: Thu, 28 Feb 2019 10:02:06 +0100 Subject: [PATCH 15/20] Change image names to work with Docker Hub --- .../docker-compose.migrations.yml | 4 ++-- samples/MicroserviceDemo/docker-compose.yml | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/samples/MicroserviceDemo/docker-compose.migrations.yml b/samples/MicroserviceDemo/docker-compose.migrations.yml index 16d112e2b7..e1ce9b0fe5 100644 --- a/samples/MicroserviceDemo/docker-compose.migrations.yml +++ b/samples/MicroserviceDemo/docker-compose.migrations.yml @@ -9,7 +9,7 @@ services: - "1433" migrations: - image: 'microservice-demo/migrations:${TAG:-latest}' + image: 'volosoft/microservice-demo-migrations:${TAG:-latest}' build: context: ../.. dockerfile: samples/MicroserviceDemo/databases/Dockerfile @@ -17,7 +17,7 @@ services: - sqlserver restore-database: - image: 'microservice-demo/restore-database:${TAG:-latest}' + image: 'volosoft/microservice-demo-restore-database:${TAG:-latest}' build: context: ../.. dockerfile: samples/MicroserviceDemo/databases/restore/Dockerfile diff --git a/samples/MicroserviceDemo/docker-compose.yml b/samples/MicroserviceDemo/docker-compose.yml index 9a3e4e8191..41ee157a43 100644 --- a/samples/MicroserviceDemo/docker-compose.yml +++ b/samples/MicroserviceDemo/docker-compose.yml @@ -31,7 +31,7 @@ services: - elasticsearch internal-gateway: - image: 'microservice-demo/internal-gateway:${TAG:-latest}' + image: 'volosoft/microservice-demo-internal-gateway:${TAG:-latest}' build: context: ../../ dockerfile: samples/MicroserviceDemo/gateways/InternalGateway.Host/Dockerfile @@ -44,7 +44,7 @@ services: - blogging-service backend-admin-app-gateway: - image: 'microservice-demo/backend-admin-app-gateway:${TAG:-latest}' + image: 'volosoft/microservice-demo-backend-admin-app-gateway:${TAG:-latest}' build: context: ../../ dockerfile: samples/MicroserviceDemo/gateways/BackendAdminAppGateway.Host/Dockerfile @@ -56,7 +56,7 @@ services: - product-service public-website-gateway: - image: 'microservice-demo/public-website-gateway:${TAG:-latest}' + image: 'volosoft/microservice-demo-public-website-gateway:${TAG:-latest}' build: context: ../../ dockerfile: samples/MicroserviceDemo/gateways/PublicWebSiteGateway.Host/Dockerfile @@ -67,7 +67,7 @@ services: - product-service blogging-service: - image: 'microservice-demo/blogging-service:${TAG:-latest}' + image: 'volosoft/microservice-demo-blogging-service:${TAG:-latest}' build: context: ../../ dockerfile: samples/MicroserviceDemo/microservices/BloggingService.Host/Dockerfile @@ -77,7 +77,7 @@ services: - redis identity-service: - image: 'microservice-demo/identity-service:${TAG:-latest}' + image: 'volosoft/microservice-demo-identity-service:${TAG:-latest}' build: context: ../../ dockerfile: samples/MicroserviceDemo/microservices/IdentityService.Host/Dockerfile @@ -88,7 +88,7 @@ services: - sqlserver product-service: - image: 'microservice-demo/product-service:${TAG:-latest}' + image: 'volosoft/microservice-demo-product-service:${TAG:-latest}' build: context: ../../ dockerfile: samples/MicroserviceDemo/microservices/ProductService.Host/Dockerfile @@ -98,7 +98,7 @@ services: - redis auth-server: - image: 'microservice-demo/auth-server:${TAG:-latest}' + image: 'volosoft/microservice-demo-auth-server:${TAG:-latest}' build: context: ../../ dockerfile: samples/MicroserviceDemo/applications/AuthServer.Host/Dockerfile @@ -109,7 +109,7 @@ services: - identity-service backend-admin-app: - image: 'microservice-demo/backend-admin-app:${TAG:-latest}' + image: 'volosoft/microservice-demo-backend-admin-app:${TAG:-latest}' build: context: ../../ dockerfile: samples/MicroserviceDemo/applications/BackendAdminApp.Host/Dockerfile @@ -118,7 +118,7 @@ services: - backend-admin-app-gateway public-website: - image: 'microservice-demo/public-website:${TAG:-latest}' + image: 'volosoft/microservice-demo-public-website:${TAG:-latest}' build: context: ../../ dockerfile: samples/MicroserviceDemo/applications/PublicWebSite.Host/Dockerfile From 6a7fb3050d2a64c6cb8c394ad9b9521eae43a4b9 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Thu, 28 Feb 2019 15:36:14 +0300 Subject: [PATCH 16/20] Only update when needed --- .../Volo/Blogging/Users/BlogUserSynchronizer.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Users/BlogUserSynchronizer.cs b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Users/BlogUserSynchronizer.cs index 6000d121f9..e6e961b8a7 100644 --- a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Users/BlogUserSynchronizer.cs +++ b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Users/BlogUserSynchronizer.cs @@ -32,8 +32,10 @@ namespace Volo.Blogging.Users } } - user.Update(eventData.Entity); - await UserRepository.UpdateAsync(user); + if (user.Update(eventData.Entity)) + { + await UserRepository.UpdateAsync(user); + } } } } From c47c3282a86b966eb576ad5c8b491fa9d0ce31ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Atakan=20=C3=96zceviz?= Date: Thu, 28 Feb 2019 15:22:42 +0100 Subject: [PATCH 17/20] Disable dotnet ef migrations on docker compose --- .../MicroserviceDemo/docker-compose.migrations.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/samples/MicroserviceDemo/docker-compose.migrations.yml b/samples/MicroserviceDemo/docker-compose.migrations.yml index e1ce9b0fe5..b91aa104c4 100644 --- a/samples/MicroserviceDemo/docker-compose.migrations.yml +++ b/samples/MicroserviceDemo/docker-compose.migrations.yml @@ -8,13 +8,13 @@ services: ports: - "1433" - migrations: - image: 'volosoft/microservice-demo-migrations:${TAG:-latest}' - build: - context: ../.. - dockerfile: samples/MicroserviceDemo/databases/Dockerfile - depends_on: - - sqlserver + # migrations: + # image: 'volosoft/microservice-demo-migrations:${TAG:-latest}' + # build: + # context: ../.. + # dockerfile: samples/MicroserviceDemo/databases/Dockerfile + # depends_on: + # - sqlserver restore-database: image: 'volosoft/microservice-demo-restore-database:${TAG:-latest}' From e79c191da3221995dcdf70a5872a0a9f42cf5d2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Atakan=20=C3=96zceviz?= Date: Fri, 1 Mar 2019 10:40:05 +0100 Subject: [PATCH 18/20] Update Microservice-Demo.md --- docs/en/Samples/Microservice-Demo.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/en/Samples/Microservice-Demo.md b/docs/en/Samples/Microservice-Demo.md index b0ee6cc1c4..55a60dca89 100644 --- a/docs/en/Samples/Microservice-Demo.md +++ b/docs/en/Samples/Microservice-Demo.md @@ -50,6 +50,20 @@ Running as docker containers is easier since all dependencies are pre-configured - Open a command line in the `samples/MicroserviceDemo` folder of the repository. +- Pull images from Docker Hub: + + ``` + docker-compose -f docker-compose.yml -f docker-compose.migrations.yml pull + ``` + +- If you want to build images locally you may skip the above step and instead use build command: + + ``` + docker-compose -f docker-compose.yml -f docker-compose.migrations.yml build + ``` + + Building images may take a **long time** depending on your machine. + - Restore SQL Server databases: ``` @@ -62,8 +76,6 @@ Running as docker containers is easier since all dependencies are pre-configured docker-compose up -d ``` - At the first run, it will take a **long time** because it will build all docker images. - - Add this line to the end of your `hosts` file: ``` From 75ae2fc525a78446d3c8f6efe99842cfc2121ce0 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 1 Mar 2019 15:30:50 +0300 Subject: [PATCH 19/20] Remove old methods. --- .../Volo/Abp/Settings/NullSettingStore.cs | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/NullSettingStore.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/NullSettingStore.cs index 705f428792..5906306e93 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/NullSettingStore.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/NullSettingStore.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using System.Threading.Tasks; +using System.Threading.Tasks; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.DependencyInjection; @@ -19,21 +18,5 @@ namespace Volo.Abp.Settings { return Task.FromResult((string) null); } - - public Task SetAsync(string name, string value, string providerName, string providerKey) - { - Logger.LogWarning($"Setting the value for {name} is not possible because current setting store is {nameof(NullSettingStore)}"); - return Task.CompletedTask; - } - - public Task> GetListAsync(string providerName, string providerKey) - { - return Task.FromResult(new List()); - } - - public Task DeleteAsync(string name, string providerName, string providerKey) - { - return Task.CompletedTask; - } } } \ No newline at end of file From 17663d61413d8749066035b96c882e13e1f61771 Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Fri, 1 Mar 2019 15:51:27 +0300 Subject: [PATCH 20/20] Added empty AbpFeaturesModule module --- framework/Volo.Abp.sln | 11 ++++++++-- .../Volo.Abp.Features.csproj | 21 +++++++++++++++++++ .../Volo/Abp/Features/AbpFeaturesModule.cs | 18 ++++++++++++++++ .../Volo/Abp/Settings/AbpSettingsModule.cs | 1 - nupkg/common.ps1 | 1 + 5 files changed, 49 insertions(+), 3 deletions(-) create mode 100644 framework/src/Volo.Abp.Features/Volo.Abp.Features.csproj create mode 100644 framework/src/Volo.Abp.Features/Volo/Abp/Features/AbpFeaturesModule.cs diff --git a/framework/Volo.Abp.sln b/framework/Volo.Abp.sln index 08104ef769..f99d6cebbc 100644 --- a/framework/Volo.Abp.sln +++ b/framework/Volo.Abp.sln @@ -222,9 +222,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.Http.Client.Identi EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.IdentityModel", "src\Volo.Abp.IdentityModel\Volo.Abp.IdentityModel.csproj", "{64D99E19-EE25-465A-82E5-17B25F4C4E18}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Mvc.Client", "src\Volo.Abp.AspNetCore.Mvc.Client\Volo.Abp.AspNetCore.Mvc.Client.csproj", "{E803DDB8-81EA-454B-9A66-9C2941100B67}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Mvc.Client", "src\Volo.Abp.AspNetCore.Mvc.Client\Volo.Abp.AspNetCore.Mvc.Client.csproj", "{E803DDB8-81EA-454B-9A66-9C2941100B67}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.AspNetCore.Mvc.Contracts", "src\Volo.Abp.AspNetCore.Mvc.Contracts\Volo.Abp.AspNetCore.Mvc.Contracts.csproj", "{88F6D091-CA16-4B71-9499-8D5B8FA2E712}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.AspNetCore.Mvc.Contracts", "src\Volo.Abp.AspNetCore.Mvc.Contracts\Volo.Abp.AspNetCore.Mvc.Contracts.csproj", "{88F6D091-CA16-4B71-9499-8D5B8FA2E712}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Features", "src\Volo.Abp.Features\Volo.Abp.Features.csproj", "{01E3D389-8872-4EB1-9D3D-13B6ED54DE0E}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -640,6 +642,10 @@ Global {88F6D091-CA16-4B71-9499-8D5B8FA2E712}.Debug|Any CPU.Build.0 = Debug|Any CPU {88F6D091-CA16-4B71-9499-8D5B8FA2E712}.Release|Any CPU.ActiveCfg = Release|Any CPU {88F6D091-CA16-4B71-9499-8D5B8FA2E712}.Release|Any CPU.Build.0 = Release|Any CPU + {01E3D389-8872-4EB1-9D3D-13B6ED54DE0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {01E3D389-8872-4EB1-9D3D-13B6ED54DE0E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {01E3D389-8872-4EB1-9D3D-13B6ED54DE0E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {01E3D389-8872-4EB1-9D3D-13B6ED54DE0E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -749,6 +755,7 @@ Global {64D99E19-EE25-465A-82E5-17B25F4C4E18} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {E803DDB8-81EA-454B-9A66-9C2941100B67} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} {88F6D091-CA16-4B71-9499-8D5B8FA2E712} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} + {01E3D389-8872-4EB1-9D3D-13B6ED54DE0E} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5} diff --git a/framework/src/Volo.Abp.Features/Volo.Abp.Features.csproj b/framework/src/Volo.Abp.Features/Volo.Abp.Features.csproj new file mode 100644 index 0000000000..e626a34a9f --- /dev/null +++ b/framework/src/Volo.Abp.Features/Volo.Abp.Features.csproj @@ -0,0 +1,21 @@ + + + + + + netstandard2.0 + Volo.Abp.Features + Volo.Abp.Features + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + + diff --git a/framework/src/Volo.Abp.Features/Volo/Abp/Features/AbpFeaturesModule.cs b/framework/src/Volo.Abp.Features/Volo/Abp/Features/AbpFeaturesModule.cs new file mode 100644 index 0000000000..f83797334f --- /dev/null +++ b/framework/src/Volo.Abp.Features/Volo/Abp/Features/AbpFeaturesModule.cs @@ -0,0 +1,18 @@ +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.Features +{ + [DependsOn( + typeof(AbpLocalizationAbstractionsModule), + typeof(AbpMultiTenancyAbstractionsModule) + )] + public class AbpFeaturesModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + + } + } +} diff --git a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs index 8c711e12c2..d86f6ca524 100644 --- a/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs +++ b/framework/src/Volo.Abp.Settings/Volo/Abp/Settings/AbpSettingsModule.cs @@ -2,7 +2,6 @@ using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; using Volo.Abp.Security; -using Volo.Abp.Users; namespace Volo.Abp.Settings { diff --git a/nupkg/common.ps1 b/nupkg/common.ps1 index 5a4aeb71e8..b6a589c0ba 100644 --- a/nupkg/common.ps1 +++ b/nupkg/common.ps1 @@ -60,6 +60,7 @@ $projects = ( "framework/src/Volo.Abp.EntityFrameworkCore.PostgreSql", "framework/src/Volo.Abp.EventBus", "framework/src/Volo.Abp.EventBus.RabbitMQ", + "framework/src/Volo.Abp.Features", "framework/src/Volo.Abp.Guids", "framework/src/Volo.Abp.HangFire", "framework/src/Volo.Abp.Http",