Our team is currently building a medical data storage and management application using the ABP Framework. Given the highly sensitive nature of our domain, our data is primarily stored in two locations:
To achieve these goals, I would like to ask ABP for advice on the best practices and implementation strategies for data encryption within the ABP ecosystem for the following two issues:
Our system currently stores medical records as XML files via S3 (MinIO).
Our PostgreSQL database contains highly sensitive patient information such as: National ID/Health Insurance Numbers, Full Names, Addresses, Medical History, etc.
I would greatly appreciate any real-world experience, insights, keywords, or related documentation you could share. Thank you!
I have a project integrated with another system (let’s call it System B). System B is responsible for managing user information and provides us with a sessionCode to identify users. When the sessionCode is valid, System B returns the full user information.
In our project, we plan to use this sessionCode for authentication by passing it through the request header. Technically, we can customize this behavior using Middleware or an ActionFilter to validate the sessionCode.
However, we would still like to leverage ABP’s built-in user context, specifically ICurrentUser, for use in Domain Services and other business logic.
So my question is: Is there a way to customize the authentication mechanism in ABP so that we can validate the sessionCode and still populate ICurrentUser properly?
Thank you.
I’m currently working on a project built with an ABP Microservice architecture, using Angular for the web UI. It has been working very well for the existing system.
Now, we need to develop a Mini App for mobile (essentially a webview embedded an existing mobile application). The project is reusing all existing backend services as the Mini App server.
The main question is about the frontend approach:
What would be the recommended approach in this case to:
Thank you!
I have built a microservice-based application with multi-tenancy, and it has already been deployed and is running in the Production environment.
Now, I would like to migrate all tenant-related data from the Production environment to a different Test environment. The goal is not to create new tenants, but to reuse the existing tenants from Production with all their original information.
What steps should I take to achieve this?
Thank you.
I am deploying an ABP microservice–based project using Docker Compose, and the application encounters an error when running the AuthServer. The application returns an HTTP 500 (Internal Server Error) from the server side. After checking the logs, I found the following error:
I have checked the language-related tables in the database, with the following results.
I would appreciate any assistance to help resolve this issue so the project can continue as soon as possible
Exception message and full stack trace:
CsdlAttp.AdministrationService.Tests test net10.0 failed with 2 error(s) (6.9s)
D:\csdl-attp\services\administration\CsdlAttp.AdministrationService.Tests\bin\Debug\net10.0\CsdlAttp.AdministrationService.Tests.dll : error TESTERROR:
CsdlAttp.AdministrationService.Tests.Controllers.DemoController_Tests.HelloWorld (5s 9ms): Error Message: Microsoft.Data.Sqlite.SqliteException : SQLite Error 1: 'no such
table: AbpLanguages'.
Stack Trace:
at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db)
at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements()+MoveNext()
at Microsoft.Data.Sqlite.SqliteCommand.GetStatements()+MoveNext()
at Microsoft.Data.Sqlite.SqliteDataReader.NextResult()
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior)
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken)
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReaderAsync(CommandBehavior behavior, CancellationToken cancellationToken)
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 cancellat ionToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.MoveNextAsync()
at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable1 source, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable1 source, CancellationToken cancellationToken)
at Volo.Abp.LanguageManagement.EntityFrameworkCore.EfCoreLanguageRepository.GetListByIsEnabledAsync(Boolean isEnabled, 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.Abp.LanguageManagement.DatabaseLanguageProvider.q5L442B2Z() at Volo.Abp.Caching.DistributedCache2.GetOrAddAsync(TCacheKey key, Func1 factory, Func1 optionsFactory, Nullable1 hideErrors, Boolean considerUow, CancellationToke n token) at Volo.Abp.LanguageManagement.DatabaseLanguageProvider.GetLanguagesAsync() at Microsoft.AspNetCore.RequestLocalization.DefaultAbpRequestLocalizationOptionsProvider.GetLocalizationOptionsAsync() at Microsoft.AspNetCore.RequestLocalization.AbpRequestLocalizationMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext() --- End of stack trace from previous location --- at Volo.Abp.AspNetCore.Tracing.AbpCorrelationIdMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<<CreateMiddleware>b__0>d.MoveNext() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.TestHost.HttpContextBuilder.<>c__DisplayClass23_0.<<SendAsync>g__RunRequestAsync|0>d.MoveNext() --- End of stack trace from previous location --- at Microsoft.AspNetCore.TestHost.ClientHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at Microsoft.AspNetCore.Mvc.Testing.Handlers.CookieContainerHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCt s, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken) at CsdlAttp.AdministrationService.Tests.AdministrationServiceIntegrationTestBase.GetResponseAsync(String url, HttpStatusCode expectedStatusCode) in D:\csdl-attp\servic es\administration\CsdlAttp.AdministrationService.Tests\AdministrationServiceIntegrationTestBase.cs:line 34 at CsdlAttp.AdministrationService.Tests.AdministrationServiceIntegrationTestBase.GetResponseAsStringAsync(String url, HttpStatusCode expectedStatusCode) in D:\csdl-att p\services\administration\CsdlAttp.AdministrationService.Tests\AdministrationServiceIntegrationTestBase.cs:line 26 at CsdlAttp.AdministrationService.Tests.Controllers.DemoController_Tests.HelloWorld() in D:\csdl-attp\services\administration\CsdlAttp.AdministrationService.Tests\Cont rollers\DemoController_Tests.cs:line 17 --- End of stack trace from previous location --- D:\csdl-attp\services\administration\CsdlAttp.AdministrationService.Tests\bin\Debug\net10.0\CsdlAttp.AdministrationService.Tests.dll : error TESTERROR: CsdlAttp.AdministrationService.Tests.ApplicationServices.PermissionAppService_Tests.Should_Get_Permissions (5s 46ms): Error Message: Microsoft.Data.Sqlite.SqliteException : SQLite Error 1: 'no such table: AbpLanguageTexts'. Stack Trace: at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db) at Microsoft.Data.Sqlite.SqliteCommand.PrepareAndEnumerateStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteCommand.GetStatements()+MoveNext() at Microsoft.Data.Sqlite.SqliteDataReader.NextResult() at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior) at Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReader(CommandBehavior behavior) at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReader(RelationalCommandParameterObject parameterObject) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.Enumerator.InitializeReader(Enumerator enumerator)
at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.Enumerator.<>c.<MoveNext>b__22_0(DbContext _, Enumerator enumerator) at Microsoft.EntityFrameworkCore.Storage.NonRetryingExecutionStrategy.Execute[TState,TResult](TState state, Func3 operation, Func3 verifySucceeded) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.Enumerator.MoveNext()
at System.Collections.Generic.List1..ctor(IEnumerable1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) at Volo.Abp.LanguageManagement.EntityFrameworkCore.EfCoreLanguageTextRepository.GetList(String resourceName, String cultureName) at Castle.Proxies.Invocations.ILanguageTextRepository_GetList.InvokeMethodOnTarget() at Castle.DynamicProxy.AbstractInvocation.Proceed() at Castle.DynamicProxy.AbstractInvocation.ProceedInfo.Invoke() at Castle.DynamicProxy.AsyncInterceptorBase.ProceedSynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) --- End of stack trace from previous location --- 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 Castle.Proxies.IBasicRepository1Proxy_7.GetList(String resourceName, String cultureName) at Volo.Abp.LanguageManagement.DynamicResourceLocalizer.CreateCacheItem(LocalizationResourceBase resource, String cultureName) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync()
at Volo.Abp.GlobalFeatures.GlobalFeatureInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Authorization.AuthorizationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync()
at Volo.Abp.Auditing.AuditingInterceptor.ProceedByLoggingAsync(IAbpMethodInvocation invocation, AbpAuditingOptions options, IAuditingHelper auditingHelper, IAuditLogSc
ope auditLogScope)
at Volo.Abp.Auditing.AuditingInterceptor.ProcessWithNewAuditingScopeAsync(IAbpMethodInvocation invocation, AbpAuditingOptions options, ICurrentUser currentUser, IAudit
ingManager auditingManager, IAuditingHelper auditingHelper, IUnitOfWorkManager unitOfWorkManager)
at Volo.Abp.Auditing.AuditingInterceptor.ProcessWithNewAuditingScopeAsync(IAbpMethodInvocation invocation, AbpAuditingOptions options, ICurrentUser currentUser, IAudit
ingManager auditingManager, IAuditingHelper auditingHelper, IUnitOfWorkManager unitOfWorkManager)
at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Validation.ValidationInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) 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 CsdlAttp.AdministrationService.Tests.ApplicationServices.PermissionAppService_Tests.Should_Get_Permissions() in D:\csdl-attp\services\administration\CsdlAttp.Admini
strationService.Tests\ApplicationServices\PermissionAppService_Tests.cs:line 26
--- End of stack trace from previous location ---
Steps to reproduce the issue: Hello ABP support team,
Our project is encountering an issue related to testing. The project requirement is that all services must pass dotnet test. However, among all the services, AdministrationService fails when running dotnet test. In the output, the error indicates that several tables related to Languages are missing. Specifically:
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'no such table: AbpLanguages'
Microsoft.Data.Sqlite.SqliteException (0x80004005): SQLite Error 1: 'no such table: AbpLanguageTexts'.
CsdlAttp.AdministrationService.Tests.ApplicationServices.PermissionAppService_Tests.Should_Get_Permissions (5s 46ms):
Error Message: Microsoft.Data.Sqlite.SqliteException: SQLite Error 1: 'no such table: AbpLanguageTexts'.
Based on the ABP documentation (https://abp.io/docs/latest/framework/data/entity-framework-core/migrations ) and the ABP AI assistant, it seems I need to manually add the table creation logic for the Language module inside the AdministrationServiceTestsModule.
I would like to confirm with the ABP support team: What is the root cause of this issue, and what is the recommended way to fix it? Thank you.
volo.abp.studio.cli 2.1.0 abp volo.abp.suite 10.0.0 abp-suite