Warren Buckley
10/17/2024, 11:47 AMWarren Buckley
10/17/2024, 11:49 AMSebastiaan
10/17/2024, 11:49 AMSebastiaan
10/17/2024, 11:50 AMWarren Buckley
10/17/2024, 11:51 AMWarren Buckley
10/17/2024, 11:52 AMWarren Buckley
10/17/2024, 11:52 AMIDashboardAuthorizationFilter
that you wire up when setting up Hangfire ?Sebastiaan
10/17/2024, 11:57 AMIDashboardAuthorizationFilter
did not work (it's 6 months ago I tried, so no idea why, I just remember it could not work).Warren Buckley
10/17/2024, 11:59 AMSebastiaan
10/17/2024, 11:59 AMWarren Buckley
10/17/2024, 12:00 PMWarren Buckley
10/17/2024, 12:00 PMWarren Buckley
10/17/2024, 12:01 PMSebastiaan
10/17/2024, 12:01 PMSebastiaan
10/17/2024, 12:04 PMUMB_AUTH_CONTEXT
and I don't know how I could get that context from C# code.Warren Buckley
10/17/2024, 12:22 PMWarren Buckley
10/17/2024, 12:38 PMcsharp
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Core.Models.Membership;
using Umbraco.Cms.Core.Security;
namespace Hello.Extensions.Controllers
{
[ApiVersion("1.0")]
[ApiExplorerSettings(GroupName = "Examples")]
public class ExampleApiController : ExampleControllerBase
{
private readonly IBackOfficeSecurityAccessor _backOfficeSecurityAccessor;
public ExampleApiController(IBackOfficeSecurityAccessor backOfficeSecurityAccessor)
{
_backOfficeSecurityAccessor = backOfficeSecurityAccessor;
}
[HttpGet("Ping")]
[ProducesResponseType<string>(StatusCodes.Status200OK)]
public string Ping() => "Pong";
[HttpGet("WhatsTheTimeMrWolf")]
[ProducesResponseType(typeof(DateTime), 200)]
public DateTime WhatsTheTimeMrWolf() => DateTime.Now;
[HttpGet("WhatsMyName")]
[ProducesResponseType<string>(StatusCodes.Status200OK)]
public string WhatsMyName()
{
// So we can see a long request from the dashboard with the spinning button
Thread.Sleep(2000);
var currentUser = _backOfficeSecurityAccessor.BackOfficeSecurity?.CurrentUser;
return currentUser?.Name ?? "I have no idea who you are";
}
[HttpGet("WhoAmI")]
[ProducesResponseType<IUser>(StatusCodes.Status200OK)]
public IUser? WhoAmI() => _backOfficeSecurityAccessor.BackOfficeSecurity?.CurrentUser;
}
}
Warren Buckley
10/17/2024, 12:40 PMWarren Buckley
10/17/2024, 12:41 PMIBackOfficeSecurityAccessor
Warren Buckley
10/17/2024, 12:42 PMWarren Buckley
10/17/2024, 12:42 PMSebastiaan
10/17/2024, 12:42 PMWarren Buckley
10/17/2024, 12:43 PMSebastiaan
10/17/2024, 12:43 PMWarren Buckley
10/17/2024, 12:43 PMSebastiaan
10/17/2024, 12:44 PMWarren Buckley
10/17/2024, 12:44 PMWarren Buckley
10/17/2024, 12:45 PMWarren Buckley
10/17/2024, 12:46 PMWhoAmI
return a rich object at all?Sebastiaan
10/17/2024, 12:46 PMWarren Buckley
10/17/2024, 12:47 PMbackOfficeSecurityAccessor.BackOfficeSecurity?.CurrentUser
is null in that scenario ?!
WeirdWarren Buckley
10/17/2024, 12:47 PMWarren Buckley
10/17/2024, 12:48 PMWarren Buckley
10/17/2024, 12:48 PMSebastiaan
10/17/2024, 12:49 PMSebastiaan
10/17/2024, 12:50 PMWarren Buckley
10/17/2024, 12:50 PMWarren Buckley
10/17/2024, 12:52 PMSebastiaan
10/17/2024, 12:52 PMExampleControllerBase
Sebastiaan
10/17/2024, 12:52 PMControllerBase
Warren Buckley
10/17/2024, 12:52 PMusing Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Common.Attributes;
using Umbraco.Cms.Web.Common.Authorization;
using Umbraco.Cms.Web.Common.Routing;
namespace Hello.Extensions.Controllers
{
[ApiController]
[BackOfficeRoute("example/api/v{version:apiVersion}")]
[Authorize(Policy = AuthorizationPolicies.SectionAccessContent)]
[MapToApi(Constants.ApiName)]
public class ExampleControllerBase : ControllerBase
{
}
}
Sebastiaan
10/17/2024, 12:52 PMWarren Buckley
10/17/2024, 12:53 PMSebastiaan
10/17/2024, 12:53 PMWarren Buckley
10/17/2024, 12:53 PMWarren Buckley
10/17/2024, 12:54 PMSebastiaan
10/17/2024, 12:58 PMWarren Buckley
10/17/2024, 1:03 PMWarren Buckley
10/17/2024, 1:04 PMSebastiaan
10/17/2024, 1:11 PMWarren Buckley
10/17/2024, 1:15 PMWarren Buckley
10/17/2024, 1:16 PMSebastiaan
10/17/2024, 1:18 PMWarren Buckley
10/17/2024, 1:19 PMSebastiaan
10/17/2024, 1:23 PMWarren Buckley
10/17/2024, 1:23 PMWarren Buckley
10/17/2024, 1:24 PMWarren Buckley
10/17/2024, 1:24 PMWarren Buckley
10/17/2024, 1:25 PMASPNETCORE_ENVIRONMENT=Development
Warren Buckley
10/17/2024, 1:26 PMSebastiaan
10/17/2024, 1:28 PMSebastiaan
10/17/2024, 1:30 PMWarren Buckley
10/17/2024, 1:34 PMWarren Buckley
10/17/2024, 1:42 PMSebastiaan
10/17/2024, 1:44 PMWarren Buckley
10/17/2024, 1:45 PMSebastiaan
10/17/2024, 1:45 PMWarren Buckley
10/17/2024, 1:46 PMWarren Buckley
10/17/2024, 1:46 PMSebastiaan
10/17/2024, 1:50 PMWarren Buckley
10/17/2024, 1:53 PM[Authorize(Policy = AuthorizationPolicies.SectionAccessContent)]
Warren Buckley
10/17/2024, 1:54 PMvar anything = this.User;
Warren Buckley
10/17/2024, 1:56 PMvar anything = this.HttpContext.GetCurrentIdentity();
Warren Buckley
10/17/2024, 1:56 PMWarren Buckley
10/17/2024, 1:56 PMvar anything = this.HttpContext.User.GetUmbracoIdentity();
Sebastiaan
10/17/2024, 2:34 PMWarren Buckley
10/17/2024, 2:34 PMWarren Buckley
10/17/2024, 2:35 PMSebastiaan
10/17/2024, 2:35 PMWarren Buckley
10/17/2024, 2:35 PMWarren Buckley
10/17/2024, 2:36 PMSebastiaan
10/17/2024, 2:41 PMcsharp
[ApiController]
[Authorize(Policy = AuthorizationPolicies.BackOfficeAccess)]
[Authorize(Policy = AuthorizationPolicies.UmbracoFeatureEnabled)]
[MapToApi(ManagementApiConfiguration.ApiName)]
[JsonOptionsName(Constants.JsonOptionsNames.BackOffice)]
[AppendEventMessages]
[Produces("application/json")]
public abstract class ManagementApiControllerBase : Controller, IUmbracoFeature
Probably MapToApi helps, and I have no ManagementApi for hangfire. Anyway, this must be a total dead end, there's no way I can add any of this to the Hangfire options.
Sorry for wasting your time!Warren Buckley
10/17/2024, 2:46 PM