Browse Source

Merge pull request #10275 from abpframework/berkan/hangfire-dashboard-authorization

feat(Hangfire): add a new field that name is enableTenant to AbpHangfireAuthorizationFilter
pull/10410/head
Halil İbrahim Kalkan 5 years ago
committed by GitHub
parent
commit
83188406aa
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 11
      docs/en/Background-Jobs-Hangfire.md
  2. 14
      framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireAuthorizationFilter.cs

11
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: If you want to require an additional permission, you can pass it into the constructor as below:
```csharp ```csharp
app.UseHangfireDashboard("/hangfire", new DashboardOptions app.UseHangfireDashboard("/hangfire", new DashboardOptions
{ {
AsyncAuthorization = new[] { new AbpHangfireAuthorizationFilter("MyHangFireDashboardPermissionName") } AsyncAuthorization = new[] { new AbpHangfireAuthorizationFilter(requiredPermissionName: "MyHangFireDashboardPermissionName") }
}); });
``` ```

14
framework/src/Volo.Abp.HangFire/Volo/Abp/Hangfire/AbpHangfireAuthorizationFilter.cs

@ -9,16 +9,18 @@ namespace Volo.Abp.Hangfire
{ {
public class AbpHangfireAuthorizationFilter : IDashboardAsyncAuthorizationFilter public class AbpHangfireAuthorizationFilter : IDashboardAsyncAuthorizationFilter
{ {
private readonly bool _enableTenant;
private readonly string _requiredPermissionName; private readonly string _requiredPermissionName;
public AbpHangfireAuthorizationFilter(string requiredPermissionName = null) public AbpHangfireAuthorizationFilter(bool enableTenant = false, string requiredPermissionName = null)
{ {
_enableTenant = requiredPermissionName.IsNullOrWhiteSpace() ? enableTenant : true;
_requiredPermissionName = requiredPermissionName; _requiredPermissionName = requiredPermissionName;
} }
public async Task<bool> AuthorizeAsync(DashboardContext context) public async Task<bool> AuthorizeAsync(DashboardContext context)
{ {
if (!IsLoggedIn(context)) if (!IsLoggedIn(context, _enableTenant))
{ {
return false; return false;
} }
@ -31,9 +33,15 @@ namespace Volo.Abp.Hangfire
return await IsPermissionGrantedAsync(context, _requiredPermissionName); 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<ICurrentUser>(); var currentUser = context.GetHttpContext().RequestServices.GetRequiredService<ICurrentUser>();
if (!enableTenant)
{
return currentUser.IsAuthenticated && !currentUser.TenantId.HasValue;
}
return currentUser.IsAuthenticated; return currentUser.IsAuthenticated;
} }

Loading…
Cancel
Save