Hi,
I ran the queries you requested. Here are the results.

The Consume permission exists in AbpResourcePermissionGrants with TenantId = NULL.
Rows found:
ProviderName = R ProviderKey = Patient TenantId = NULL ResourceName = Volo.AIManagement.Workspaces.Workspace ResourceKey = 5E45D5C5-AE6A-7604-1A18-3A2151F28514
ProviderName = U ProviderKey = 3B23E6FF-AA66-8029-6CA7-3A214C3D575F TenantId = NULL ResourceName = Volo.AIManagement.Workspaces.Workspace ResourceKey = 5E45D5C5-AE6A-7604-1A18-3A2151F28514
ProviderName = R ProviderKey = admin TenantId = NULL ResourceName = Volo.AIManagement.Workspaces.Workspace ResourceKey = 5E45D5C5-AE6A-7604-1A18-3A2151F28514
The logged-in user is:
The workspace is:
So the ResourceKey in AbpResourcePermissionGrants matches the PatientAssistant workspace Id, and both the user and grants are in host context with TenantId = NULL.
I also confirmed that there is a direct user grant for test2 using ProviderName = U and ProviderKey = test2 user Id.
I will now capture the exact failing API request from the browser Network tab and share it as well. Based on the database rows above, the resource permission seems to be persisted correctly, so I want to understand why the Consume check is still failing for this user.
I am using ABP AI Management in an Angular-based multi-portal application. I created an AI workspace named PatientAssistant and granted the Consume permission to the Patient role, the test2 user, and the admin role. In the AI Management workspace permission modal, the permission appears correctly granted. However, when I open the Patient Portal and access the AI Assistant page, I still get the authorization error: “Authorization failed! Given policy has not granted: Volo.AIManagement.Workspaces.Workspace.Consume”. The failing portal URL is http://localhost:4200/ai-management/workspaces, and the logged-in patient user is test2. I have already checked that the Consume permission is visible in the workspace permissions modal, granted to the Patient role, granted directly to the test2 user, and that the user is authenticated in the Patient Portal. I want to know whether this permission is tenant-specific, whether I need to grant it inside the tenant context instead of the host/admin context, whether AI Management workspace permissions require any additional role or claim configuration for Angular portals, and whether I need to clear permission cache, restart the API, logout/login again, or refresh dynamic claims after granting the permission. Also, please confirm if there is any special setup required when consuming ABP AI Management workspaces from a separate Patient Portal in a multi-portal ABP Angular application. My environment is ABP Framework version [write your ABP version], UI Angular, authentication OpenIddict, multi-tenancy enabled, AI Management module enabled, and the portal is the Patient Portal.
https://drive.google.com/file/d/DELETED-inxLleY/view?usp=sharing
here is my app.config.ts
import { provideAbpCore, ReplaceableComponentsService, withOptions } from '@abp/ng.core'; import { provideAbpOAuth } from '@abp/ng.oauth'; import { provideSettingManagementConfig } from '@abp/ng.setting-management/config'; import { provideFeatureManagementConfig } from '@abp/ng.feature-management'; import { provideAbpThemeShared, withValidationBluePrint } from '@abp/ng.theme.shared'; import { provideIdentityConfig } from '@volo/abp.ng.identity/config'; import { provideCommercialUiConfig } from '@volo/abp.commercial.ng.ui/config'; import { provideAccountAdminConfig } from '@volo/abp.ng.account/admin/config'; import { provideAccountPublicConfig } from '@volo/abp.ng.account/public/config'; import { provideGdprConfig, withCookieConsentOptions } from '@volo/abp.ng.gdpr/config'; import { provideAuditLoggingConfig } from '@volo/abp.ng.audit-logging/config'; import { provideLanguageManagementConfig } from '@volo/abp.ng.language-management/config'; import { registerLocale } from '@volo/abp.ng.language-management/locale'; import { provideFileManagementConfig } from '@volo/abp.ng.file-management/config'; import { provideChatConfig } from '@volo/abp.ng.chat/config'; import { provideSaasConfig } from '@volo/abp.ng.saas/config'; import { provideTextTemplateManagementConfig } from '@volo/abp.ng.text-template-management/config'; import { provideOpeniddictproConfig } from '@volo/abp.ng.openiddictpro/config'; import { provideThemeBasicConfig } from '@abp/ng.theme.basic'; import { provideLogo, withEnvironmentOptions } from "@abp/ng.theme.shared"; import { ApplicationConfig, inject, provideAppInitializer } from '@angular/core'; import { provideAnimations } from '@angular/platform-browser/animations'; import { provideRouter } from '@angular/router'; import { provideHttpClient, withInterceptors } from '@angular/common/http'; import { CustomChatComponent } from './chat/custom-chat.component'; import { environment } from '../environments/environment'; import { APP_ROUTES } from './app.routes'; import { APP_ROUTE_PROVIDER } from './route.provider'; import { FOOTER_PROVIDER } from './footer/footer.config'; import { provideAIManagementConfig } from '@volo/abp.ng.ai-management/config';
export const appConfig: ApplicationConfig = { providers: [ provideRouter(APP_ROUTES), APP_ROUTE_PROVIDER, FOOTER_PROVIDER, provideAppInitializer(() => { inject(ReplaceableComponentsService).add({ component: CustomChatComponent, key: 'Chat.ChatComponent', }); }), provideAnimations(), provideHttpClient( withInterceptors([]) ), provideAbpOAuth(), provideAccountPublicConfig(), provideAbpCore( withOptions({ environment, registerLocaleFn: registerLocale(),
}),
),
provideCommercialUiConfig(),
provideThemeBasicConfig(),
provideAbpThemeShared(
withValidationBluePrint({
wrongPassword: 'Please choose 1q2w3E*',
}),
),
provideLogo(withEnvironmentOptions(environment)),
provideGdprConfig(
withCookieConsentOptions({
cookiePolicyUrl: '/gdpr-cookie-consent/cookie',
privacyPolicyUrl: '/gdpr-cookie-consent/privacy',
}),
),
provideChatConfig(),
] };
i use angular with Basic Theme source code and i try to use angular side login but when i redirect to angular login page it show nothing and in console it have this error
_untracked-chunk.mjs:2586 ERROR ɵNotFound: NG0201: No provider found for InjectionToken CORE_OPTIONS. Source: Standalone[_AccountLayoutComponent]. Path: _MultiTenancyService -> _SessionStateService -> _ConfigStateService -> _AbpApplicationConfigurationService -> _RestService -> InjectionToken CORE_OPTIONS. Find more at https://v21.angular.dev/errors/NG0201
at createRuntimeError (_untracked-chunk.mjs:600:17)
at NullInjector.get (_untracked-chunk.mjs:881:21)
at R3Injector.get (_untracked-chunk.mjs:1206:27)
at R3Injector.get (_untracked-chunk.mjs:1206:27)
at R3Injector.retrieve (_untracked-chunk.mjs:1116:19)
at injectInjectorOnly (_untracked-chunk.mjs:670:35)
at ɵɵinject (_untracked-chunk.mjs:682:40)
at inject2 (_untracked-chunk.mjs:691:10)
at new _RestService (abp-ng.core.mjs:2213:20)
at Object.RestService_Factory [as factory] (abp-ng.core.mjs:2272:14)
not help this
i create page in CMSKit and show that pages on Public Site that are work fine recently i get exception on that CMS Pages and Public Site is automatically redirect on Authserver . here is that exception
{ "code": null, "message": "Your request is not valid!", "details": "The following errors were detected during validation.\r\n - The value 'home' is not valid.\r\n", "data": null, "validationErrors": [ { "message": "The value 'home' is not valid.", "members": [ "id" ] } ] } 2026-04-16 07:13:59.473 +00:00 [WRN] ModelState is not valid! See ValidationErrors for details. Volo.Abp.Validation.AbpValidationException: ModelState is not valid! See ValidationErrors for details. at Volo.Abp.AspNetCore.Mvc.Validation.ModelStateValidator.Validate(ModelStateDictionary modelState) at Volo.Abp.AspNetCore.Mvc.Validation.AbpValidationActionFilter.OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) 2026-04-16 07:13:59.474 +00:00 [WRN] There are 1 validation errors: The value 'home' is not valid. (id) 2026-04-16 07:13:59.494 +00:00 [INF] Executing ObjectResult, writing value of type 'Volo.Abp.Http.RemoteServiceErrorResponse'. (Emerald.HttpApi)' 2026-04-16 07:13:59.504 +00:00 [INF] Request finished HTTP/2 GET https://localhost:44362/home - 400 null application/json; charset=utf-8 5669.4966ms 2026-04-16 07:14:00.838 +00:00 [DBG] Executing HealthCheck collector HostedService. it give this exception on all CMS pages
[enisn] said: Hi,
Thanks for the details.
Based on the behavior you described, this looks more like a server-side AI Management setup/database issue than an OpenAI API issue.
The main reason is:
- The Workspaces page first loads AI Management data from your application database.
- The provider dropdown is populated from provider names registered at application startup.
So when the page throws a generic
AbpRemoteCallExceptionand the provider list is also empty, the usual cause is that the AI Management module was added but its database changes and/or startup registration were not completed yet.
In your case, the strongest clue is that the solution was created with
--skip-migration --skip-migrator.
Please check these steps:
- Create and apply a new EF Core migration after importing
Volo.AIManagement.
If the AI Management tables were not created yet, the
/api/ai-management/workspacesrequest will fail with this kind of generic remote call exception.
- Make sure
Volo.AIManagement.OpenAIis installed on the server startup side of the application, not only in a UI/client project.
The available providers are collected from registered factories at startup. If the OpenAI module is not loaded by the startup application, the provider dropdown will stay empty.
- Restart the application after installing the provider package and after applying the migration.
- Check the
*.HttpApi.Hostlogs while opening the Workspaces page.
The real exception should be written there. If the migration is missing, you will typically see the actual SQL/table-related error on the host side.
So the first thing we recommend is:
- add/apply the migration,
- restart
HttpApi.Host,
- open the Workspaces page again,
- then verify whether
OpenAIappears in the provider dropdown.
If the problem still continues after that, please share these details:
- the exact exception from the
HttpApi.Hostlog,
- whether the AI Management tables were created successfully,
- and which project you added
Volo.AIManagement.OpenAIto.
Best regards,
ABP Support Team
i already added Migration and run that migration on Database and i also install Volo.AIManagement.OpenAI this package on server Side
and here is log of HttpApi.Host
2026-04-07 10:33:09.145 +00:00 [ERR] Failed executing DbCommand (67ms) [Parameters=[@BFPAowQuR='?' (Size = 4000)], CommandType='"Text"', CommandTimeout='30']
SELECT TOP(2) [a].[Id], [a].[ApplicationName], [a].[SupportedProviders]
FROM [AIManagementApplicationAIProviders] AS [a]
WHERE [a].[ApplicationName] = @BFPAowQuR
2026-04-07 10:33:09.184 +00:00 [ERR] An exception occurred while iterating over the results of a query for context type 'Volo.AIManagement.EntityFrameworkCore.AIManagementDbContext'.
Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid object name 'AIManagementApplicationAIProviders'.
at Microsoft.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__195_0(Task1 result) at System.Threading.Tasks.ContinuationResultTaskFromResultTask2.InnerInvoke()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location ---
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func4 operation, Func4 verifySucceeded, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.MoveNextAsync()
ClientConnectionId:2e865100-2130-45c1-99bd-b87da3a33893
Error Number:208,State:1,Class:16
ClientConnectionId before routing:1f14091e-7caf-426e-91ad-69a85d48c8b4
Routing Destination:dc8127efd63b.tr15377.eastus2-a.worker.database.windows.net,11044
Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid object name 'AIManagementApplicationAIProviders'.
at Microsoft.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__195_0(Task1 result) at System.Threading.Tasks.ContinuationResultTaskFromResultTask2.InnerInvoke()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location ---
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func4 operation, Func4 verifySucceeded, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.MoveNextAsync()
ClientConnectionId:2e865100-2130-45c1-99bd-b87da3a33893
Error Number:208,State:1,Class:16
ClientConnectionId before routing:1f14091e-7caf-426e-91ad-69a85d48c8b4
Routing Destination:dc8127efd63b.tr15377.eastus2-a.worker.database.windows.net,11044
2026-04-07 10:33:09.237 +00:00 [ERR] An error occurred while updating initial workspaces for application Millennial.HttpApi.Host. Skipping initial workspace update.
Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid object name 'AIManagementApplicationAIProviders'.
at Microsoft.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__195_0(Task1 result) at System.Threading.Tasks.ContinuationResultTaskFromResultTask2.InnerInvoke()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location ---
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func4 operation, Func4 verifySucceeded, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.MoveNextAsync()
at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleOrDefaultAsync[TSource](IAsyncEnumerable1 asyncEnumerable, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleOrDefaultAsync[TSource](IAsyncEnumerable1 asyncEnumerable, CancellationToken cancellationToken)
at Volo.Abp.Domain.Repositories.EntityFrameworkCore.EfCoreRepository2.FindAsync(Expression1 predicate, Boolean includeDetails, CancellationToken cancellationToken)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Volo.AIManagement.ApplicationWorkspaceProviders.ApplicationAIProviderManager.UpdateProvidersAsync(String applicationName, String[] supportedProviders) at Volo.AIManagement.Workspaces.WorkspaceSaver.SaveAsync(String applicationName, IEnumerable1 supportedProviders, IEnumerable1 workspaces) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous(IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapter.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at Volo.AIManagement.Workspaces.InitialWorkspaceUpdater.UpdateAsync()
and here is my db Table

this answer is not helpful
Hi i am adding AI Management Module from AbpSuite in my project after add module and i run my project add assign all permission of AI Management to my user after that i go to WorkSpace page it give this exception:
Volo.Abp.Http.Client.AbpRemoteCallException: An internal error occurred during your request!
at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.ThrowExceptionForResponseAsync(HttpResponseMessage response) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.RequestAsync(ClientProxyRequestContext requestContext)
at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.RequestAsync[T](ClientProxyRequestContext requestContext) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.RequestAsync[T](String methodName, ClientProxyRequestTypeValue arguments)
at Volo.AIManagement.Workspaces.WorkspaceClientProxy.GetListAsync(WorkspaceGetListInput input)
at Volo.Abp.BlazoriseUI.AbpCrudPageBase`10.GetEntitiesAsync()
2026-04-07 09:52:43.178 +00:00 [WRN] None of the specified endpoints were reachable
and when i try to Create new WorkSpace it cant show any provider but i already install Volo.AIManagement.OpenAI Package