From 499c354afbdf590336c64dcfa034c19abda3922e Mon Sep 17 00:00:00 2001 From: sassassin <530521314@qq.com> Date: Sat, 28 Aug 2021 08:18:52 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=B8=BALogDashboard=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=9D=83=E9=99=90=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/PearAdmin.AbpTemplate.Admin/Dockerfile | 7 +-- .../AbpLogDashboardAuthorizationFilter.cs | 54 +++++++++++++++++++ src/PearAdmin.AbpTemplate.Admin/Startup.cs | 15 ++++-- .../Permissions/AppPermissionNames.cs | 1 + .../Permissions/AppPermissionProvider.cs | 1 + 5 files changed, 70 insertions(+), 8 deletions(-) create mode 100644 src/PearAdmin.AbpTemplate.Admin/Extensions/Filters/AbpLogDashboardAuthorizationFilter.cs diff --git a/src/PearAdmin.AbpTemplate.Admin/Dockerfile b/src/PearAdmin.AbpTemplate.Admin/Dockerfile index 4cb02f6..a7f4410 100644 --- a/src/PearAdmin.AbpTemplate.Admin/Dockerfile +++ b/src/PearAdmin.AbpTemplate.Admin/Dockerfile @@ -10,14 +10,15 @@ RUN echo 'Asia/Shanghai' >/etc/timezone FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build WORKDIR /src +COPY ["module/PearAdmin.AbpTemplate.Storage.Minio/PearAdmin.AbpTemplate.Storage.Minio.csproj", "module/PearAdmin.AbpTemplate.Storage.Minio/"] +COPY ["module/PearAdmin.AbpTemplate.Storage/PearAdmin.AbpTemplate.Storage.csproj", "module/PearAdmin.AbpTemplate.Storage/"] +COPY ["module/PearAdmin.AbpTemplate.NLog/PearAdmin.AbpTemplate.NLog.csproj", "module/PearAdmin.AbpTemplate.NLog/"] COPY ["src/PearAdmin.AbpTemplate.Admin/PearAdmin.AbpTemplate.Admin.csproj", "src/PearAdmin.AbpTemplate.Admin/"] COPY ["src/PearAdmin.AbpTemplate.Gateway/PearAdmin.AbpTemplate.Gateway.csproj", "src/PearAdmin.AbpTemplate.Gateway/"] COPY ["src/PearAdmin.AbpTemplate.Application/PearAdmin.AbpTemplate.Application.csproj", "src/PearAdmin.AbpTemplate.Application/"] -COPY ["module/PearAdmin.AbpTemplate.Storage.Minio/PearAdmin.AbpTemplate.Storage.Minio.csproj", "module/PearAdmin.AbpTemplate.Storage.Minio/"] -COPY ["module/PearAdmin.AbpTemplate.Storage/PearAdmin.AbpTemplate.Storage.csproj", "module/PearAdmin.AbpTemplate.Storage/"] COPY ["src/PearAdmin.AbpTemplate.Core/PearAdmin.AbpTemplate.Core.csproj", "src/PearAdmin.AbpTemplate.Core/"] -COPY ["tool/PearAdmin.AbpTemplate.Shared/PearAdmin.AbpTemplate.Shared.csproj", "tool/PearAdmin.AbpTemplate.Shared/"] COPY ["src/PearAdmin.AbpTemplate.EntityFrameworkCore/PearAdmin.AbpTemplate.EntityFrameworkCore.csproj", "src/PearAdmin.AbpTemplate.EntityFrameworkCore/"] +COPY ["tool/PearAdmin.AbpTemplate.Shared/PearAdmin.AbpTemplate.Shared.csproj", "tool/PearAdmin.AbpTemplate.Shared/"] RUN dotnet restore "src/PearAdmin.AbpTemplate.Admin/PearAdmin.AbpTemplate.Admin.csproj" COPY . . WORKDIR "/src/src/PearAdmin.AbpTemplate.Admin" diff --git a/src/PearAdmin.AbpTemplate.Admin/Extensions/Filters/AbpLogDashboardAuthorizationFilter.cs b/src/PearAdmin.AbpTemplate.Admin/Extensions/Filters/AbpLogDashboardAuthorizationFilter.cs new file mode 100644 index 0000000..9fa7fe5 --- /dev/null +++ b/src/PearAdmin.AbpTemplate.Admin/Extensions/Filters/AbpLogDashboardAuthorizationFilter.cs @@ -0,0 +1,54 @@ +using Abp.Authorization; +using Abp.Dependency; +using Abp.Extensions; +using Abp.Runtime.Session; +using LogDashboard; +using LogDashboard.Authorization; + +namespace PearAdmin.AbpTemplate.Admin.Extensions.Filters +{ + public class AbpLogDashboardAuthorizationFilter : ILogDashboardAuthorizationFilter + { + public IIocResolver IocResolver { get; set; } + + private readonly string _requiredPermissionName; + + public AbpLogDashboardAuthorizationFilter(string requiredPermissionName = null) + { + _requiredPermissionName = requiredPermissionName; + + IocResolver = IocManager.Instance; + } + + public bool Authorization(LogDashboardContext context) + { + if (!IsLoggedIn()) + { + return false; + } + + if (!_requiredPermissionName.IsNullOrEmpty() && !IsPermissionGranted(_requiredPermissionName)) + { + return false; + } + + return true; + } + + private bool IsLoggedIn() + { + using (var abpSession = IocResolver.ResolveAsDisposable()) + { + return abpSession.Object.UserId.HasValue; + } + } + + private bool IsPermissionGranted(string requiredPermissionName) + { + using (var permissionChecker = IocResolver.ResolveAsDisposable()) + { + return permissionChecker.Object.IsGranted(requiredPermissionName); + } + } + } +} diff --git a/src/PearAdmin.AbpTemplate.Admin/Startup.cs b/src/PearAdmin.AbpTemplate.Admin/Startup.cs index a212c45..3028946 100644 --- a/src/PearAdmin.AbpTemplate.Admin/Startup.cs +++ b/src/PearAdmin.AbpTemplate.Admin/Startup.cs @@ -8,6 +8,7 @@ using Abp.Json; using Hangfire; using Hangfire.MemoryStorage; using LogDashboard; +using LogDashboard.Authorization.Filters; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Identity; @@ -19,6 +20,7 @@ using Microsoft.Extensions.Logging; using Newtonsoft.Json.Serialization; using PearAdmin.AbpTemplate.Admin.Configuration; using PearAdmin.AbpTemplate.Admin.Extensions; +using PearAdmin.AbpTemplate.Admin.Extensions.Filters; using PearAdmin.AbpTemplate.Admin.SignalR; using PearAdmin.AbpTemplate.Authorization; using PearAdmin.AbpTemplate.Identity; @@ -59,17 +61,20 @@ namespace PearAdmin.AbpTemplate.Admin services.AddSignalR(); - services.AddHangfire(config => + services.AddHangfire(options => { #if DEBUG - config.UseMemoryStorage(); + options.UseMemoryStorage(); #else - var redisConnectionString = _appConfiguration.GetConnectionString(AbpTemplateCoreConsts.RedisConnectionStringName); - config.UseRedisStorage(redisConnectionString); + var redisConnectionString = Configuration.GetConnectionString(AbpTemplateCoreConsts.RedisConnectionStringName); + options.UseRedisStorage(redisConnectionString); #endif }); - services.AddLogDashboard(); + services.AddLogDashboard(options => + { + options.AddAuthorizationFilter(new AbpLogDashboardAuthorizationFilter(AppPermissionNames.Pages_SystemManagement_HangfireDashboard)); + }); return services.AddAbp(AbpBootstrapperOptionsExtension.GetOptions(Configuration)); } diff --git a/src/PearAdmin.AbpTemplate.Core/AppProvider/Permissions/AppPermissionNames.cs b/src/PearAdmin.AbpTemplate.Core/AppProvider/Permissions/AppPermissionNames.cs index 72ed872..738b2ed 100644 --- a/src/PearAdmin.AbpTemplate.Core/AppProvider/Permissions/AppPermissionNames.cs +++ b/src/PearAdmin.AbpTemplate.Core/AppProvider/Permissions/AppPermissionNames.cs @@ -47,6 +47,7 @@ public const string Pages_SystemManagement_Maintenance_Logs_Refresh = "Pages.SystemManagement.Maintenance.Logs.Refresh"; public const string Pages_SystemManagement_HangfireDashboard = "Pages.SystemManagement.HangfireDashboard"; + public const string Pages_SystemManagement_LogDashboard = "Pages.SystemManagement.LogDashboard"; #endregion #region ResourceManagement diff --git a/src/PearAdmin.AbpTemplate.Core/AppProvider/Permissions/AppPermissionProvider.cs b/src/PearAdmin.AbpTemplate.Core/AppProvider/Permissions/AppPermissionProvider.cs index 45fa3de..e656c50 100644 --- a/src/PearAdmin.AbpTemplate.Core/AppProvider/Permissions/AppPermissionProvider.cs +++ b/src/PearAdmin.AbpTemplate.Core/AppProvider/Permissions/AppPermissionProvider.cs @@ -53,6 +53,7 @@ namespace PearAdmin.AbpTemplate.Authorization logs.CreateChildPermission(AppPermissionNames.Pages_SystemManagement_Maintenance_Logs_Refresh, L("RefreshLog")); systemManagement.CreateChildPermission(AppPermissionNames.Pages_SystemManagement_HangfireDashboard, L("HangfireDashboard"), multiTenancySides: MultiTenancySides.Tenant); + systemManagement.CreateChildPermission(AppPermissionNames.Pages_SystemManagement_LogDashboard, L("LogDashboard"), multiTenancySides: MultiTenancySides.Tenant); #endregion #region ResourceManagement -- Gitee From d6d8ae74d4150ba7730a6eba84922925e71d91b9 Mon Sep 17 00:00:00 2001 From: sassassin <530521314@qq.com> Date: Sat, 28 Aug 2021 08:20:30 +0800 Subject: [PATCH 2/2] Clean code --- src/PearAdmin.AbpTemplate.Admin/Startup.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PearAdmin.AbpTemplate.Admin/Startup.cs b/src/PearAdmin.AbpTemplate.Admin/Startup.cs index 3028946..3aad1c4 100644 --- a/src/PearAdmin.AbpTemplate.Admin/Startup.cs +++ b/src/PearAdmin.AbpTemplate.Admin/Startup.cs @@ -79,7 +79,7 @@ namespace PearAdmin.AbpTemplate.Admin return services.AddAbp(AbpBootstrapperOptionsExtension.GetOptions(Configuration)); } - public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseAbp(); -- Gitee