diff --git a/docs/en/Background-Jobs-Hangfire.md b/docs/en/Background-Jobs-Hangfire.md index 3bde5ea010..4ee58d84ef 100644 --- a/docs/en/Background-Jobs-Hangfire.md +++ b/docs/en/Background-Jobs-Hangfire.md @@ -95,12 +95,21 @@ app.UseHangfireDashboard("/hangfire", new DashboardOptions }); ``` +* `AbpHangfireAuthorizationFilter` is an implementation of an authorization filter. + +#### AbpHangfireAuthorizationFilter + +`AbpHangfireAuthorizationFilter` class has the following fields: + +* **`enableTenant` (`bool`, default: `false`):** Enables/disables accessing the Hangfire dashboard on tenant users. +* **`requiredPermissionName` (`string`, default: `null`):** Hangfire dashboard is accessible only if the current user has the specified permission. In this case, if we specify a permission name, we don't need to set `enableTenant` `true` because the permission system already does it. + If you want to require an additional permission, you can pass it into the constructor as below: ```csharp app.UseHangfireDashboard("/hangfire", new DashboardOptions { - AsyncAuthorization = new[] { new AbpHangfireAuthorizationFilter("MyHangFireDashboardPermissionName") } + AsyncAuthorization = new[] { new AbpHangfireAuthorizationFilter(requiredPermissionName: "MyHangFireDashboardPermissionName") } }); ``` diff --git a/framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireAuthorizationFilter.cs b/framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireAuthorizationFilter.cs index 15fbb4f60c..e7c205a962 100644 --- a/framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireAuthorizationFilter.cs +++ b/framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireAuthorizationFilter.cs @@ -9,16 +9,18 @@ namespace Volo.Abp.Hangfire { public class AbpHangfireAuthorizationFilter : IDashboardAsyncAuthorizationFilter { + private readonly bool _enableTenant; private readonly string _requiredPermissionName; - public AbpHangfireAuthorizationFilter(string requiredPermissionName = null) + public AbpHangfireAuthorizationFilter(bool enableTenant = false, string requiredPermissionName = null) { + _enableTenant = requiredPermissionName.IsNullOrWhiteSpace() ? enableTenant : true; _requiredPermissionName = requiredPermissionName; } public async Task AuthorizeAsync(DashboardContext context) { - if (!IsLoggedIn(context)) + if (!IsLoggedIn(context, _enableTenant)) { return false; } @@ -31,9 +33,15 @@ namespace Volo.Abp.Hangfire return await IsPermissionGrantedAsync(context, _requiredPermissionName); } - private static bool IsLoggedIn(DashboardContext context) + private static bool IsLoggedIn(DashboardContext context, bool enableTenant) { var currentUser = context.GetHttpContext().RequestServices.GetRequiredService(); + + if (!enableTenant) + { + return currentUser.IsAuthenticated && !currentUser.TenantId.HasValue; + } + return currentUser.IsAuthenticated; }