Open Closed

Volo.Abp.Authorization.AbpAuthorizationException and Background Job #2232


User avatar
0
Rrader30 created
  • ABP Framework version: v4.3
  • UI type: Angular
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): yes
  • Exception message and stack trace: Volo.Abp.Authorization.AbpAuthorizationException
  • Steps to reproduce the issue:"

I created a background job. I generated a class in the *.Domain project.

My class is defined below

public class PassiveCheckerWorker : AsyncPeriodicBackgroundWorkerBase
{

    public PassiveCheckerWorker(AbpAsyncTimer timer,
                                IServiceScopeFactory serviceScopeFactory) : base(timer,serviceScopeFactory)
    {
        Timer.Period = 150000; //600000; //10 minutes
    }

    protected async override Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
    {
        Logger.LogInformation("Starting: Setting status of inactive users...");

        var _objectMapper = workerContext.ServiceProvider.GetRequiredService<IObjectMapper>();

        GetContractorsInput _input = new GetContractorsInput();
        var _contractor = workerContext.ServiceProvider.GetRequiredService<IContractorsAppService>(); //IRepository<Contractor, Guid>>(); //IContractorsAppService>();

        //IQueryable<Contractor> queryable = await _contractor.GetQueryableAsync();

        DateTime _today = DateTime.Now;
        DateTime _monthAgo = _today.AddMonths(-1);

        //Set WCI Expiration
        _input.wciexpirationdateMin = _monthAgo;
        _input.wciexpirationdateMax = _today;

        PagedResultDto<ContractorDto> _clist = await _contractor.GetListAsync(_input);

        //var query = from contractor in queryable
        //            where contractor.wciexpirationdate <= _today
        //            orderby contractor.Id
        //            select contractor;

        //var _cntr = query.ToList();

        foreach (var _c in _clist.Items)
        {
            //Check status
            if (_c.status != 5 && _c.status != 6 && _c.status != 3)
            {
                //Change status
                _c.status = 6;
                ContractorUpdateDto _update = new ContractorUpdateDto();
                var _cntr = _objectMapper.Map<ContractorDto, ContractorUpdateDto>(_c);
                await _contractor.UpdateAsync(_c.Id, _cntr);

                //TODO: Send out email notification to vendor
            }
        }

        //Set GLI Expiration
        GetContractorsInput _input2 = new GetContractorsInput();
        _input2.gliexperationdateMin = _monthAgo;
        _input2.gliexperationdateMax = _today;

        PagedResultDto<ContractorDto> _clist2 = await _contractor.GetListAsync(_input2);
        foreach (var _c in _clist2.Items)
        {
            //Check status
            if (_c.status != 5 && _c.status != 6 && _c.status != 3)
            {
                //Change status
                _c.status = 5;
                ContractorUpdateDto _update = new ContractorUpdateDto();
                var _cntr = _objectMapper.Map<ContractorDto, ContractorUpdateDto>(_c);
                await _contractor.UpdateAsync(_c.Id, _cntr);

                //TODO: Send out email notification to vendor
            }
        }

        Logger.LogInformation("Completed: Setting status of inactive users...");
    }
}

I registed it in the DomainModule.cs file

public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
    context.AddBackgroundWorker<PassiveCheckerWorker>();
}

the background job executes fine. My Issue is I get the following in the Audit log

               [
  {
    "code": "Volo.Authorization:010001",
    "message": "Exception of type 'Volo.Abp.Authorization.AbpAuthorizationException' was thrown.",
    "details": "AbpAuthorizationException: Exception of type 'Volo.Abp.Authorization.AbpAuthorizationException' was thrown.\r\nSTACK TRACE:    at Microsoft.AspNetCore.Authorization.AbpAuthorizationServiceExtensions.CheckAsync(IAuthorizationService authorizationService, AuthorizationPolicy policy)\r\n   at Volo.Abp.Authorization.MethodInvocationAuthorizationService.CheckAsync(MethodInvocationAuthorizationContext context)\r\n   at Volo.Abp.Authorization.AuthorizationInterceptor.AuthorizeAsync(IAbpMethodInvocation invocation)\r\n   at Volo.Abp.Authorization.AuthorizationInterceptor.InterceptAsync(IAbpMethodInvocation invocation)\r\n   at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)\r\n   at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)\r\n   at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()\r\n   at Volo.Abp.GlobalFeatures.GlobalFeatureInterceptor.InterceptAsync(IAbpMethodInvocation invocation)\r\n   at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)\r\n   at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)\r\n   at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()\r\n   at Volo.Abp.Auditing.AuditingInterceptor.ProceedByLoggingAsync(IAbpMethodInvocation invocation, IAuditingHelper auditingHelper, IAuditLogScope auditLogScope)\r\n   at Volo.Abp.Auditing.AuditingInterceptor.ProcessWithNewAuditingScopeAsync(IAbpMethodInvocation invocation, AbpAuditingOptions options, ICurrentUser currentUser, IAuditingManager auditingManager, IAuditingHelper auditingHelper)\r\n",
    "data": null,
    "validationErrors": null
  }
]

I have also attempted to run a linq query and by-pass the application layer, but my code seems to hang on

var query = from contractor in queryable
                   where contractor.wciexpirationdate <= _today
                    orderby contractor.Id
                       select contractor;

  var _cntr = query.ToList();

How can I execute a background job as a user or how can I by-pass the authentication?

Markdown supported.
Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)

1 Answer(s)
  • User Avatar
    0
    maliming created
    Support Team Fullstack Developer

    hi

    https://support.abp.io/QA/Questions/485/Background-Worker-needs-the-authorization

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.8.0-preview. Updated on September 16, 2026, 14:50
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.