diff --git a/modules/cms-kit/Volo.CmsKit.sln b/modules/cms-kit/Volo.CmsKit.sln
index 4d92e6e34b..9874845fd1 100644
--- a/modules/cms-kit/Volo.CmsKit.sln
+++ b/modules/cms-kit/Volo.CmsKit.sln
@@ -55,6 +55,28 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "unified", "unified", "{963F
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "public", "public", "{3C74B8E8-CB34-49C8-B02A-05E959601FEE}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "admin", "admin", "{E737206B-FA99-4460-861D-82902ECE93DB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.CmsKit.Admin.Application", "src\Volo.CmsKit.Admin.Application\Volo.CmsKit.Admin.Application.csproj", "{A5363215-BF61-467F-80D0-40D93590F509}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.CmsKit.Admin.Application.Contracts", "src\Volo.CmsKit.Admin.Application.Contracts\Volo.CmsKit.Admin.Application.Contracts.csproj", "{AE000591-86E3-4AD4-AA86-C47FED4A3ACB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.CmsKit.Admin.HttpApi", "src\Volo.CmsKit.Admin.HttpApi\Volo.CmsKit.Admin.HttpApi.csproj", "{A402371A-B714-4BBC-AC22-9C0BD7679F25}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.CmsKit.Admin.HttpApi.Client", "src\Volo.CmsKit.Admin.HttpApi.Client\Volo.CmsKit.Admin.HttpApi.Client.csproj", "{97D7BB7A-1D45-4E54-B327-3718F62E8A86}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.CmsKit.Admin.Web", "src\Volo.CmsKit.Admin.Web\Volo.CmsKit.Admin.Web.csproj", "{CA6A7FAF-0EF9-42D9-B7A3-5CA690687045}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.CmsKit.Public.Application", "src\Volo.CmsKit.Public.Application\Volo.CmsKit.Public.Application.csproj", "{E3963E05-9645-4AFD-AC99-C5E9F9153B61}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.CmsKit.Public.Application.Contracts", "src\Volo.CmsKit.Public.Application.Contracts\Volo.CmsKit.Public.Application.Contracts.csproj", "{50147423-F37D-46D3-A25D-C51CD48A7DA7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.CmsKit.Public.HttpApi", "src\Volo.CmsKit.Public.HttpApi\Volo.CmsKit.Public.HttpApi.csproj", "{37C03B72-5FD8-4B67-8090-8A20CD8095A6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.CmsKit.Public.HttpApi.Client", "src\Volo.CmsKit.Public.HttpApi.Client\Volo.CmsKit.Public.HttpApi.Client.csproj", "{E790C2C6-39AC-4068-AA7D-309DC9AA1437}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.CmsKit.Public.Web", "src\Volo.CmsKit.Public.Web\Volo.CmsKit.Public.Web.csproj", "{BE2572ED-F505-435D-9A90-30DBC6C2DC1D}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -141,6 +163,46 @@ Global
{3D872C41-E226-45C8-89C1-9D3DBD7C73F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3D872C41-E226-45C8-89C1-9D3DBD7C73F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3D872C41-E226-45C8-89C1-9D3DBD7C73F2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A5363215-BF61-467F-80D0-40D93590F509}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A5363215-BF61-467F-80D0-40D93590F509}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A5363215-BF61-467F-80D0-40D93590F509}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A5363215-BF61-467F-80D0-40D93590F509}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AE000591-86E3-4AD4-AA86-C47FED4A3ACB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AE000591-86E3-4AD4-AA86-C47FED4A3ACB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AE000591-86E3-4AD4-AA86-C47FED4A3ACB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AE000591-86E3-4AD4-AA86-C47FED4A3ACB}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A402371A-B714-4BBC-AC22-9C0BD7679F25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A402371A-B714-4BBC-AC22-9C0BD7679F25}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A402371A-B714-4BBC-AC22-9C0BD7679F25}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A402371A-B714-4BBC-AC22-9C0BD7679F25}.Release|Any CPU.Build.0 = Release|Any CPU
+ {97D7BB7A-1D45-4E54-B327-3718F62E8A86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {97D7BB7A-1D45-4E54-B327-3718F62E8A86}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {97D7BB7A-1D45-4E54-B327-3718F62E8A86}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {97D7BB7A-1D45-4E54-B327-3718F62E8A86}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CA6A7FAF-0EF9-42D9-B7A3-5CA690687045}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CA6A7FAF-0EF9-42D9-B7A3-5CA690687045}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CA6A7FAF-0EF9-42D9-B7A3-5CA690687045}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CA6A7FAF-0EF9-42D9-B7A3-5CA690687045}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E3963E05-9645-4AFD-AC99-C5E9F9153B61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E3963E05-9645-4AFD-AC99-C5E9F9153B61}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E3963E05-9645-4AFD-AC99-C5E9F9153B61}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E3963E05-9645-4AFD-AC99-C5E9F9153B61}.Release|Any CPU.Build.0 = Release|Any CPU
+ {50147423-F37D-46D3-A25D-C51CD48A7DA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {50147423-F37D-46D3-A25D-C51CD48A7DA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {50147423-F37D-46D3-A25D-C51CD48A7DA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {50147423-F37D-46D3-A25D-C51CD48A7DA7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {37C03B72-5FD8-4B67-8090-8A20CD8095A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {37C03B72-5FD8-4B67-8090-8A20CD8095A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {37C03B72-5FD8-4B67-8090-8A20CD8095A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {37C03B72-5FD8-4B67-8090-8A20CD8095A6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E790C2C6-39AC-4068-AA7D-309DC9AA1437}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E790C2C6-39AC-4068-AA7D-309DC9AA1437}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E790C2C6-39AC-4068-AA7D-309DC9AA1437}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E790C2C6-39AC-4068-AA7D-309DC9AA1437}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BE2572ED-F505-435D-9A90-30DBC6C2DC1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BE2572ED-F505-435D-9A90-30DBC6C2DC1D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BE2572ED-F505-435D-9A90-30DBC6C2DC1D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BE2572ED-F505-435D-9A90-30DBC6C2DC1D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -169,6 +231,17 @@ Global
{36E2735F-CEAB-44C8-A6D1-2CDAFF399751} = {963FBC0A-1FBA-47DA-8A61-8F57D3EC8D49}
{3B7B6317-1B85-4164-8E11-75574F80AE17} = {963FBC0A-1FBA-47DA-8A61-8F57D3EC8D49}
{3C74B8E8-CB34-49C8-B02A-05E959601FEE} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545}
+ {E737206B-FA99-4460-861D-82902ECE93DB} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545}
+ {A5363215-BF61-467F-80D0-40D93590F509} = {E737206B-FA99-4460-861D-82902ECE93DB}
+ {AE000591-86E3-4AD4-AA86-C47FED4A3ACB} = {E737206B-FA99-4460-861D-82902ECE93DB}
+ {A402371A-B714-4BBC-AC22-9C0BD7679F25} = {E737206B-FA99-4460-861D-82902ECE93DB}
+ {97D7BB7A-1D45-4E54-B327-3718F62E8A86} = {E737206B-FA99-4460-861D-82902ECE93DB}
+ {CA6A7FAF-0EF9-42D9-B7A3-5CA690687045} = {E737206B-FA99-4460-861D-82902ECE93DB}
+ {E3963E05-9645-4AFD-AC99-C5E9F9153B61} = {3C74B8E8-CB34-49C8-B02A-05E959601FEE}
+ {50147423-F37D-46D3-A25D-C51CD48A7DA7} = {3C74B8E8-CB34-49C8-B02A-05E959601FEE}
+ {37C03B72-5FD8-4B67-8090-8A20CD8095A6} = {3C74B8E8-CB34-49C8-B02A-05E959601FEE}
+ {E790C2C6-39AC-4068-AA7D-309DC9AA1437} = {3C74B8E8-CB34-49C8-B02A-05E959601FEE}
+ {BE2572ED-F505-435D-9A90-30DBC6C2DC1D} = {3C74B8E8-CB34-49C8-B02A-05E959601FEE}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4324B3B4-B60B-4E3C-91D8-59576B4E26DD}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.csproj
new file mode 100644
index 0000000000..6cda6e3bc2
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo.CmsKit.Admin.Application.Contracts.csproj
@@ -0,0 +1,16 @@
+
+
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/AdminApplicationContractsModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/AdminApplicationContractsModule.cs
new file mode 100644
index 0000000000..b2fd98458f
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/AdminApplicationContractsModule.cs
@@ -0,0 +1,16 @@
+using Volo.Abp.Application;
+using Volo.Abp.Modularity;
+using Volo.Abp.Authorization;
+
+namespace Volo.CmsKit.Admin
+{
+ [DependsOn(
+ typeof(CmsKitDomainSharedModule),
+ typeof(AbpDddApplicationContractsModule),
+ typeof(AbpAuthorizationModule)
+ )]
+ public class AdminApplicationContractsModule : AbpModule
+ {
+
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Permissions/AdminPermissionDefinitionProvider.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Permissions/AdminPermissionDefinitionProvider.cs
new file mode 100644
index 0000000000..bc3c24ffb9
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Permissions/AdminPermissionDefinitionProvider.cs
@@ -0,0 +1,19 @@
+using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.Localization;
+using Volo.CmsKit.Localization;
+
+namespace Volo.CmsKit.Admin.Permissions
+{
+ public class AdminPermissionDefinitionProvider : PermissionDefinitionProvider
+ {
+ public override void Define(IPermissionDefinitionContext context)
+ {
+ var myGroup = context.AddGroup(AdminPermissions.GroupName, L("Permission:Admin"));
+ }
+
+ private static LocalizableString L(string name)
+ {
+ return LocalizableString.Create(name);
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Permissions/AdminPermissions.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Permissions/AdminPermissions.cs
new file mode 100644
index 0000000000..35417c02bc
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Permissions/AdminPermissions.cs
@@ -0,0 +1,14 @@
+using Volo.Abp.Reflection;
+
+namespace Volo.CmsKit.Admin.Permissions
+{
+ public class AdminPermissions
+ {
+ public const string GroupName = "Admin";
+
+ public static string[] GetAll()
+ {
+ return ReflectionHelper.GetPublicConstantsRecursively(typeof(AdminPermissions));
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj
new file mode 100644
index 0000000000..0ad8da1379
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo.CmsKit.Admin.Application.csproj
@@ -0,0 +1,17 @@
+
+
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/AdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/AdminAppService.cs
new file mode 100644
index 0000000000..9504290fc7
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/AdminAppService.cs
@@ -0,0 +1,14 @@
+using Volo.Abp.Application.Services;
+using Volo.CmsKit.Localization;
+
+namespace Volo.CmsKit.Admin
+{
+ public abstract class AdminAppService : ApplicationService
+ {
+ protected AdminAppService()
+ {
+ LocalizationResource = typeof(CmsKitResource);
+ ObjectMapperContext = typeof(AdminApplicationModule);
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/AdminApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/AdminApplicationAutoMapperProfile.cs
new file mode 100644
index 0000000000..0e41481ed3
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/AdminApplicationAutoMapperProfile.cs
@@ -0,0 +1,14 @@
+using AutoMapper;
+
+namespace Volo.CmsKit.Admin
+{
+ public class AdminApplicationAutoMapperProfile : Profile
+ {
+ public AdminApplicationAutoMapperProfile()
+ {
+ /* You can configure your AutoMapper mapping configuration here.
+ * Alternatively, you can split your mapping configurations
+ * into multiple profile classes for a better organization. */
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/AdminApplicationModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/AdminApplicationModule.cs
new file mode 100644
index 0000000000..dc4c73600e
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/AdminApplicationModule.cs
@@ -0,0 +1,25 @@
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.AutoMapper;
+using Volo.Abp.Modularity;
+using Volo.Abp.Application;
+
+namespace Volo.CmsKit.Admin
+{
+ [DependsOn(
+ typeof(CmsKitDomainModule),
+ typeof(AdminApplicationContractsModule),
+ typeof(AbpDddApplicationModule),
+ typeof(AbpAutoMapperModule)
+ )]
+ public class AdminApplicationModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.AddAutoMapperObjectMapper();
+ Configure(options =>
+ {
+ options.AddMaps(validate: true);
+ });
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.csproj
new file mode 100644
index 0000000000..5dc2a07cfd
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo.CmsKit.Admin.HttpApi.Client.csproj
@@ -0,0 +1,15 @@
+
+
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo/CmsKit/Admin/AdminHttpApiClientModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo/CmsKit/Admin/AdminHttpApiClientModule.cs
new file mode 100644
index 0000000000..dd600cf2c1
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/Volo/CmsKit/Admin/AdminHttpApiClientModule.cs
@@ -0,0 +1,22 @@
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.Http.Client;
+using Volo.Abp.Modularity;
+
+namespace Volo.CmsKit.Admin
+{
+ [DependsOn(
+ typeof(AdminApplicationContractsModule),
+ typeof(AbpHttpClientModule))]
+ public class AdminHttpApiClientModule : AbpModule
+ {
+ public const string RemoteServiceName = "Admin";
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.AddHttpClientProxies(
+ typeof(AdminApplicationContractsModule).Assembly,
+ RemoteServiceName
+ );
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.csproj
new file mode 100644
index 0000000000..d36d9ada73
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo.CmsKit.Admin.HttpApi.csproj
@@ -0,0 +1,15 @@
+
+
+
+
+
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/AdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/AdminController.cs
new file mode 100644
index 0000000000..9e66873133
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/AdminController.cs
@@ -0,0 +1,13 @@
+using Volo.Abp.AspNetCore.Mvc;
+using Volo.CmsKit.Localization;
+
+namespace Volo.CmsKit.Admin
+{
+ public abstract class AdminController : AbpController
+ {
+ protected AdminController()
+ {
+ LocalizationResource = typeof(CmsKitResource);
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/AdminHttpApiModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/AdminHttpApiModule.cs
new file mode 100644
index 0000000000..09f5312693
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/AdminHttpApiModule.cs
@@ -0,0 +1,33 @@
+using Localization.Resources.AbpUi;
+using Volo.Abp.AspNetCore.Mvc;
+using Volo.Abp.Localization;
+using Volo.Abp.Modularity;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.CmsKit.Localization;
+
+namespace Volo.CmsKit.Admin
+{
+ [DependsOn(
+ typeof(AdminApplicationContractsModule),
+ typeof(AbpAspNetCoreMvcModule))]
+ public class AdminHttpApiModule : AbpModule
+ {
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ PreConfigure(mvcBuilder =>
+ {
+ mvcBuilder.AddApplicationPartIfNotExists(typeof(AdminHttpApiModule).Assembly);
+ });
+ }
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.Resources
+ .Get()
+ .AddBaseTypes(typeof(AbpUiResource));
+ });
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/AdminWebAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/AdminWebAutoMapperProfile.cs
new file mode 100644
index 0000000000..3bba8ecf13
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/AdminWebAutoMapperProfile.cs
@@ -0,0 +1,14 @@
+using AutoMapper;
+
+namespace Volo.CmsKit.Admin.Web
+{
+ public class AdminWebAutoMapperProfile : Profile
+ {
+ public AdminWebAutoMapperProfile()
+ {
+ /* You can configure your AutoMapper mapping configuration here.
+ * Alternatively, you can split your mapping configurations
+ * into multiple profile classes for a better organization. */
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/AdminWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/AdminWebModule.cs
new file mode 100644
index 0000000000..dcc18c17b9
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/AdminWebModule.cs
@@ -0,0 +1,58 @@
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.CmsKit.Admin.Web.Menus;
+using Volo.Abp.AspNetCore.Mvc.Localization;
+using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
+using Volo.Abp.AutoMapper;
+using Volo.Abp.Modularity;
+using Volo.Abp.UI.Navigation;
+using Volo.Abp.VirtualFileSystem;
+using Volo.CmsKit.Localization;
+
+namespace Volo.CmsKit.Admin.Web
+{
+ [DependsOn(
+ typeof(AdminHttpApiModule),
+ typeof(AbpAspNetCoreMvcUiThemeSharedModule),
+ typeof(AbpAutoMapperModule)
+ )]
+ public class AdminWebModule : AbpModule
+ {
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.PreConfigure(options =>
+ {
+ options.AddAssemblyResource(typeof(CmsKitResource), typeof(AdminWebModule).Assembly);
+ });
+
+ PreConfigure(mvcBuilder =>
+ {
+ mvcBuilder.AddApplicationPartIfNotExists(typeof(AdminWebModule).Assembly);
+ });
+ }
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.MenuContributors.Add(new AdminMenuContributor());
+ });
+
+ Configure(options =>
+ {
+ options.FileSets.AddEmbedded();
+ });
+
+ context.Services.AddAutoMapperObjectMapper();
+ Configure(options =>
+ {
+ options.AddMaps(validate: true);
+ });
+
+ Configure(options =>
+ {
+ //Configure authorization.
+ });
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/AdminMenuContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/AdminMenuContributor.cs
new file mode 100644
index 0000000000..8c3110e487
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/AdminMenuContributor.cs
@@ -0,0 +1,23 @@
+using System.Threading.Tasks;
+using Volo.Abp.UI.Navigation;
+
+namespace Volo.CmsKit.Admin.Web.Menus
+{
+ public class AdminMenuContributor : IMenuContributor
+ {
+ public async Task ConfigureMenuAsync(MenuConfigurationContext context)
+ {
+ if (context.Menu.Name == StandardMenus.Main)
+ {
+ await ConfigureMainMenu(context);
+ }
+ }
+
+ private Task ConfigureMainMenu(MenuConfigurationContext context)
+ {
+ //Add main menu items.
+
+ return Task.CompletedTask;
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/AdminMenus.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/AdminMenus.cs
new file mode 100644
index 0000000000..2a2b649414
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/AdminMenus.cs
@@ -0,0 +1,11 @@
+namespace Volo.CmsKit.Admin.Web.Menus
+{
+ public class AdminMenus
+ {
+ private const string Prefix = "Admin";
+
+ //Add your menu items here...
+ //public const string Home = Prefix + ".MyNewMenuItem";
+
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/Admin/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/Admin/Index.cshtml
new file mode 100644
index 0000000000..545243ac28
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/Admin/Index.cshtml
@@ -0,0 +1,9 @@
+@page
+@using Microsoft.Extensions.Localization
+@using Volo.CmsKit.Localization
+@model Volo.CmsKit.Admin.Web.Pages.Admin.IndexModel
+@inject IStringLocalizer L
+@{
+}
+Admin
+@L["SamplePageMessage"]
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/Admin/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/Admin/Index.cshtml.cs
new file mode 100644
index 0000000000..5d461b1473
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/Admin/Index.cshtml.cs
@@ -0,0 +1,9 @@
+namespace Volo.CmsKit.Admin.Web.Pages.Admin
+{
+ public class IndexModel : AdminPageModel
+ {
+ public void OnGet()
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/Admin/_ViewImports.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/Admin/_ViewImports.cshtml
new file mode 100644
index 0000000000..c1da1f5f10
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/Admin/_ViewImports.cshtml
@@ -0,0 +1,4 @@
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
+@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI
+@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap
+@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bundling
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/AdminPageModel.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/AdminPageModel.cs
new file mode 100644
index 0000000000..3143ff64e8
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/AdminPageModel.cs
@@ -0,0 +1,16 @@
+using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
+using Volo.CmsKit.Localization;
+
+namespace Volo.CmsKit.Admin.Web.Pages
+{
+ /* Inherit your PageModel classes from this class.
+ */
+ public abstract class AdminPageModel : AbpPageModel
+ {
+ protected AdminPageModel()
+ {
+ LocalizationResourceType = typeof(CmsKitResource);
+ ObjectMapperContext = typeof(AdminWebModule);
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.csproj
new file mode 100644
index 0000000000..2211c335db
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Volo.CmsKit.Admin.Web.csproj
@@ -0,0 +1,36 @@
+
+
+
+
+
+ netcoreapp3.1
+ $(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
+ true
+ Library
+ Volo.CmsKit.Admin.Web
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo.CmsKit.Public.Application.Contracts.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo.CmsKit.Public.Application.Contracts.csproj
new file mode 100644
index 0000000000..6cda6e3bc2
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo.CmsKit.Public.Application.Contracts.csproj
@@ -0,0 +1,16 @@
+
+
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Permissions/PublicPermissionDefinitionProvider.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Permissions/PublicPermissionDefinitionProvider.cs
new file mode 100644
index 0000000000..cfe3ec7063
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Permissions/PublicPermissionDefinitionProvider.cs
@@ -0,0 +1,19 @@
+using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.Localization;
+using Volo.CmsKit.Localization;
+
+namespace Volo.CmsKit.Public.Permissions
+{
+ public class PublicPermissionDefinitionProvider : PermissionDefinitionProvider
+ {
+ public override void Define(IPermissionDefinitionContext context)
+ {
+ var myGroup = context.AddGroup(PublicPermissions.GroupName, L("Permission:Public"));
+ }
+
+ private static LocalizableString L(string name)
+ {
+ return LocalizableString.Create(name);
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Permissions/PublicPermissions.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Permissions/PublicPermissions.cs
new file mode 100644
index 0000000000..56e344f989
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Permissions/PublicPermissions.cs
@@ -0,0 +1,14 @@
+using Volo.Abp.Reflection;
+
+namespace Volo.CmsKit.Public.Permissions
+{
+ public class PublicPermissions
+ {
+ public const string GroupName = "Public";
+
+ public static string[] GetAll()
+ {
+ return ReflectionHelper.GetPublicConstantsRecursively(typeof(PublicPermissions));
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/PublicApplicationContractsModule.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/PublicApplicationContractsModule.cs
new file mode 100644
index 0000000000..8a4ee7f8e1
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/PublicApplicationContractsModule.cs
@@ -0,0 +1,16 @@
+using Volo.Abp.Application;
+using Volo.Abp.Modularity;
+using Volo.Abp.Authorization;
+
+namespace Volo.CmsKit.Public
+{
+ [DependsOn(
+ typeof(CmsKitDomainSharedModule),
+ typeof(AbpDddApplicationContractsModule),
+ typeof(AbpAuthorizationModule)
+ )]
+ public class PublicApplicationContractsModule : AbpModule
+ {
+
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj
new file mode 100644
index 0000000000..8f3233172a
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo.CmsKit.Public.Application.csproj
@@ -0,0 +1,17 @@
+
+
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicAppService.cs
new file mode 100644
index 0000000000..5593482811
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicAppService.cs
@@ -0,0 +1,14 @@
+using Volo.Abp.Application.Services;
+using Volo.CmsKit.Localization;
+
+namespace Volo.CmsKit.Public
+{
+ public abstract class PublicAppService : ApplicationService
+ {
+ protected PublicAppService()
+ {
+ LocalizationResource = typeof(CmsKitResource);
+ ObjectMapperContext = typeof(PublicApplicationModule);
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs
new file mode 100644
index 0000000000..d1249f29b2
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs
@@ -0,0 +1,14 @@
+using AutoMapper;
+
+namespace Volo.CmsKit.Public
+{
+ public class PublicApplicationAutoMapperProfile : Profile
+ {
+ public PublicApplicationAutoMapperProfile()
+ {
+ /* You can configure your AutoMapper mapping configuration here.
+ * Alternatively, you can split your mapping configurations
+ * into multiple profile classes for a better organization. */
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationModule.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationModule.cs
new file mode 100644
index 0000000000..4ad2dc8cf5
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationModule.cs
@@ -0,0 +1,25 @@
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.AutoMapper;
+using Volo.Abp.Modularity;
+using Volo.Abp.Application;
+
+namespace Volo.CmsKit.Public
+{
+ [DependsOn(
+ typeof(CmsKitDomainModule),
+ typeof(PublicApplicationContractsModule),
+ typeof(AbpDddApplicationModule),
+ typeof(AbpAutoMapperModule)
+ )]
+ public class PublicApplicationModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.AddAutoMapperObjectMapper();
+ Configure(options =>
+ {
+ options.AddMaps(validate: true);
+ });
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo.CmsKit.Public.HttpApi.Client.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo.CmsKit.Public.HttpApi.Client.csproj
new file mode 100644
index 0000000000..fa84ffe86b
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo.CmsKit.Public.HttpApi.Client.csproj
@@ -0,0 +1,15 @@
+
+
+
+
+
+ netstandard2.0
+
+
+
+
+
+
+
+
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo/CmsKit/Public/PublicHttpApiClientModule.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo/CmsKit/Public/PublicHttpApiClientModule.cs
new file mode 100644
index 0000000000..79a753eb9b
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/Volo/CmsKit/Public/PublicHttpApiClientModule.cs
@@ -0,0 +1,22 @@
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.Http.Client;
+using Volo.Abp.Modularity;
+
+namespace Volo.CmsKit.Public
+{
+ [DependsOn(
+ typeof(PublicApplicationContractsModule),
+ typeof(AbpHttpClientModule))]
+ public class PublicHttpApiClientModule : AbpModule
+ {
+ public const string RemoteServiceName = "Public";
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.AddHttpClientProxies(
+ typeof(PublicApplicationContractsModule).Assembly,
+ RemoteServiceName
+ );
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo.CmsKit.Public.HttpApi.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo.CmsKit.Public.HttpApi.csproj
new file mode 100644
index 0000000000..c96eb44bb3
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo.CmsKit.Public.HttpApi.csproj
@@ -0,0 +1,15 @@
+
+
+
+
+
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/PublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/PublicController.cs
new file mode 100644
index 0000000000..5683e42e44
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/PublicController.cs
@@ -0,0 +1,13 @@
+using Volo.Abp.AspNetCore.Mvc;
+using Volo.CmsKit.Localization;
+
+namespace Volo.CmsKit.Public
+{
+ public abstract class PublicController : AbpController
+ {
+ protected PublicController()
+ {
+ LocalizationResource = typeof(CmsKitResource);
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/PublicHttpApiModule.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/PublicHttpApiModule.cs
new file mode 100644
index 0000000000..9f3d25d366
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/PublicHttpApiModule.cs
@@ -0,0 +1,33 @@
+using Localization.Resources.AbpUi;
+using Volo.Abp.AspNetCore.Mvc;
+using Volo.Abp.Localization;
+using Volo.Abp.Modularity;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.CmsKit.Localization;
+
+namespace Volo.CmsKit.Public
+{
+ [DependsOn(
+ typeof(PublicApplicationContractsModule),
+ typeof(AbpAspNetCoreMvcModule))]
+ public class PublicHttpApiModule : AbpModule
+ {
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ PreConfigure(mvcBuilder =>
+ {
+ mvcBuilder.AddApplicationPartIfNotExists(typeof(PublicHttpApiModule).Assembly);
+ });
+ }
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.Resources
+ .Get()
+ .AddBaseTypes(typeof(AbpUiResource));
+ });
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/PublicMenuContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/PublicMenuContributor.cs
new file mode 100644
index 0000000000..b337a9504c
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/PublicMenuContributor.cs
@@ -0,0 +1,23 @@
+using System.Threading.Tasks;
+using Volo.Abp.UI.Navigation;
+
+namespace Volo.CmsKit.Public.Web.Menus
+{
+ public class PublicMenuContributor : IMenuContributor
+ {
+ public async Task ConfigureMenuAsync(MenuConfigurationContext context)
+ {
+ if (context.Menu.Name == StandardMenus.Main)
+ {
+ await ConfigureMainMenu(context);
+ }
+ }
+
+ private Task ConfigureMainMenu(MenuConfigurationContext context)
+ {
+ //Add main menu items.
+
+ return Task.CompletedTask;
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/PublicMenus.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/PublicMenus.cs
new file mode 100644
index 0000000000..f4809ec988
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Menus/PublicMenus.cs
@@ -0,0 +1,11 @@
+namespace Volo.CmsKit.Public.Web.Menus
+{
+ public class PublicMenus
+ {
+ private const string Prefix = "Public";
+
+ //Add your menu items here...
+ //public const string Home = Prefix + ".MyNewMenuItem";
+
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/Index.cshtml
new file mode 100644
index 0000000000..b09a38fd87
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/Index.cshtml
@@ -0,0 +1,9 @@
+@page
+@using Microsoft.Extensions.Localization
+@using Volo.CmsKit.Localization
+@model Volo.CmsKit.Public.Web.Pages.Public.IndexModel
+@inject IStringLocalizer L
+@{
+}
+Public
+@L["SamplePageMessage"]
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/Index.cshtml.cs
new file mode 100644
index 0000000000..2c16293ae7
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/Index.cshtml.cs
@@ -0,0 +1,9 @@
+namespace Volo.CmsKit.Public.Web.Pages.Public
+{
+ public class IndexModel : PublicPageModel
+ {
+ public void OnGet()
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/_ViewImports.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/_ViewImports.cshtml
new file mode 100644
index 0000000000..c1da1f5f10
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/_ViewImports.cshtml
@@ -0,0 +1,4 @@
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
+@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI
+@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap
+@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bundling
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/PublicPageModel.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/PublicPageModel.cs
new file mode 100644
index 0000000000..a2d4d13b9f
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/PublicPageModel.cs
@@ -0,0 +1,16 @@
+using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
+using Volo.CmsKit.Localization;
+
+namespace Volo.CmsKit.Public.Web.Pages
+{
+ /* Inherit your PageModel classes from this class.
+ */
+ public abstract class PublicPageModel : AbpPageModel
+ {
+ protected PublicPageModel()
+ {
+ LocalizationResourceType = typeof(CmsKitResource);
+ ObjectMapperContext = typeof(PublicWebModule);
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/PublicWebAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/PublicWebAutoMapperProfile.cs
new file mode 100644
index 0000000000..35bf9f709e
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/PublicWebAutoMapperProfile.cs
@@ -0,0 +1,14 @@
+using AutoMapper;
+
+namespace Volo.CmsKit.Public.Web
+{
+ public class PublicWebAutoMapperProfile : Profile
+ {
+ public PublicWebAutoMapperProfile()
+ {
+ /* You can configure your AutoMapper mapping configuration here.
+ * Alternatively, you can split your mapping configurations
+ * into multiple profile classes for a better organization. */
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/PublicWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/PublicWebModule.cs
new file mode 100644
index 0000000000..a512f37bdd
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/PublicWebModule.cs
@@ -0,0 +1,58 @@
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.CmsKit.Public.Web.Menus;
+using Volo.Abp.AspNetCore.Mvc.Localization;
+using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
+using Volo.Abp.AutoMapper;
+using Volo.Abp.Modularity;
+using Volo.Abp.UI.Navigation;
+using Volo.Abp.VirtualFileSystem;
+using Volo.CmsKit.Localization;
+
+namespace Volo.CmsKit.Public.Web
+{
+ [DependsOn(
+ typeof(PublicHttpApiModule),
+ typeof(AbpAspNetCoreMvcUiThemeSharedModule),
+ typeof(AbpAutoMapperModule)
+ )]
+ public class PublicWebModule : AbpModule
+ {
+ public override void PreConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.PreConfigure(options =>
+ {
+ options.AddAssemblyResource(typeof(CmsKitResource), typeof(PublicWebModule).Assembly);
+ });
+
+ PreConfigure(mvcBuilder =>
+ {
+ mvcBuilder.AddApplicationPartIfNotExists(typeof(PublicWebModule).Assembly);
+ });
+ }
+
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ Configure(options =>
+ {
+ options.MenuContributors.Add(new PublicMenuContributor());
+ });
+
+ Configure(options =>
+ {
+ options.FileSets.AddEmbedded();
+ });
+
+ context.Services.AddAutoMapperObjectMapper();
+ Configure(options =>
+ {
+ options.AddMaps(validate: true);
+ });
+
+ Configure(options =>
+ {
+ //Configure authorization.
+ });
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj
new file mode 100644
index 0000000000..b5b79e923b
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Volo.CmsKit.Public.Web.csproj
@@ -0,0 +1,36 @@
+
+
+
+
+
+ netcoreapp3.1
+ $(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
+ true
+ Library
+ Volo.CmsKit.Public.Web
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.csproj
index 5a8b4b074d..81f9a513b1 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Web/Volo.CmsKit.Web.csproj
@@ -33,8 +33,4 @@
-
-
-
-