Activities of "zokho"

Hi ABP team,

We're building a multi-tenant healthcare product (outpatient queue management) on ABP Commercial 10.6.0 / .NET 10, modern multi-layer template, modular with the React UI, using the Low-Code System module for tenant-configurable data capture (e.g. pre-appointment questionnaires). Our deployment is database-per-tenant with separated host/tenant schemas — each tenant has its own database built from its own migration set.

What we've observed with the Low-Code module in this topology:

The designer model is a single global document: LowCodeModels has no TenantId, and when a tenant admin edits the model in the Admin Console designer, the mutations are persisted to the host database's model document (verified via LowCodeModelMutationHistories). Entities created by a tenant admin therefore appear in every tenant's menu. However, the physical table for a tenant-created entity is created by IDynamicTableCreator under the current tenant's connection, i.e. only in the creating tenant's database. The result is an entity that is defined platform-wide but whose table exists in exactly one tenant database — other tenants (and the host) see the entity but cannot use it. The dynamic permission definitions (Dynamic__<Entity>__*) are persisted to the host-side dynamic permission store only, so tenant users receive 403s on dynamic pages in separate-database tenants. Deleting an entity in the designer removes it from the model document but leaves the physical table in place (we understand this is deliberate data protection — a supported cleanup path would still be welcome).

Our questions:

Is tenant-scoped modelling on the module's roadmap? Specifically the semantics we need: host-authored entities shared with all tenants; tenant-authored entities private to the authoring tenant. The layered model architecture (DynamicModelLayerBase, ModelJsonComposer, RuntimeJsonDynamicModelLayer, DynamicEntititesModelCacheKeyFactory) looks purpose-built for a tenant overlay layer, so we'd rather wait for an official implementation than build one. If it's planned, is there a rough timeline? If it's not planned: what is the supported extension path? Is implementing a custom DynamicModelLayerBase-derived tenant layer plus a replaced IDynamicTableCreator (fanning host-published tables out to tenant databases) the intended seam, or are there internal assumptions (designer app service, concurrency stamp, mutation history, save points, EF model cache) that make this unsupported today? In the meantime, is the observed behaviour in (1)+(2) — tenant-admin edits landing in the global model while the table lands tenant-side — intended, or should we log it as a defect? For now we're revoking AbpLowCodeDesigner.* from tenant roles as a safety measure. Is there a recommended way to scope visibility of host-authored entities per tenant (e.g. via the dynamic permissions or features) that you'd consider supported?

Great! Thanks!

there is no package name as Volo.Saas.Application.Contracts but there is one as Volo.Saas.Host.Application.Contracts which is already added in the main module of my solution. Should I add the package in my module Application.Contracts project?

how can I have a reference to the ITenantAppService from my module though? should I add a specific abp package via Nuget?

  • Template: app
  • Created ABP Studio Version: 2.1.2
  • Current ABP Studio Version: 2.1.6
  • Tiered: No
  • Multi-Tenancy: Yes
  • UI Framework: blazor-webapp
  • Theme: leptonx
  • Theme Style: system
  • Theme Menu Placement: side
  • Database Provider: ef
  • Database Management System: postgresql
  • Separate Tenant Schema: No
  • Mobile Framework: maui
  • Public Website: Yes
  • Social Login: Yes
  • Include Tests: Yes
  • Kubernetes Configuration: Yes
  • Distributed Event Bus: rabbitmq
  • Use Local References: No
  • Optional Modules:
    • GDPR
    • FileManagement
    • TextTemplateManagement
    • LanguageManagement
    • AuditLogging
    • Chat
    • OpenIddictAdmin
  • Selected Languages: Arabic, Chinese (Simplified), Chinese (Traditional), English, English (United Kingdom), French, German (Germany), Hindi , Italian, Russian, Spanish
  • Default Language: Arabic
  • Create Command: abp new Jdoe.Pci -t app --ui-framework blazor-webapp --mobile maui --database-provider ef --database-management-system postgresql --theme leptonx --skip-migration --skip-migrator --public-website --without-cms-kit --sample-crud-page --dont-run-install-libs --dont-run-bundling -chat -file-management

I have a module and entities defines within that modules which some extend from IMultiTenant. I wonder what would be the best approach to load tenant details for a record when returning result to ui via Dto? I dont think it would be a good practice to add a navigation property on the the entity to the Tenant. I also dont have access to the ITenantRepository in the application in my module to query the tenant, which again I dont believe it would be a best approach when trying to follow the DDD.

thanks. does it mean at the moment there is no way to add/update these ExtraProperties on the AbpUser and I have to define my own Api to add/update values for this?

  • Template: app
  • Created ABP Studio Version: 2.1.2
  • Current ABP Studio Version: 2.1.2
  • Tiered: No
  • Multi-Tenancy: Yes
  • UI Framework: blazor-webapp
  • Theme: leptonx
  • Theme Style: system
  • Theme Menu Placement: side
  • Run Install Libs: No
  • Database Provider: ef
  • Database Management System: postgresql
  • Separate Tenant Schema: No
  • Mobile Framework: maui
  • Public Website: Yes
  • Social Login: Yes
  • Include Tests: Yes
  • Kubernetes Configuration: Yes
  • Distributed Event Bus: rabbitmq
  • Use Local References: No
  • Optional Modules:
    • GDPR
    • FileManagement
    • TextTemplateManagement
    • LanguageManagement
    • AuditLogging
    • Chat
    • OpenIddictAdmin
  • Selected Languages: Arabic, Chinese (Simplified), Chinese (Traditional), English, English (United Kingdom), French, German (Germany), Hindi , Italian, Russian, Spanish
  • Default Language: Arabic
  • Create Command: abp new Jdoe.Pci -t app --ui-framework blazor-webapp --mobile maui --database-provider ef --database-management-system postgresql --theme leptonx --skip-migration --skip-migrator --public-website --without-cms-kit --sample-crud-page --dont-run-install-libs --dont-run-bundling -chat -file-management

I can see there is a property as ExtraProperties in the AbpUser but there is no end point to update that property. I wonder what its purpose and how I can add value in there? I can see its marked as readonly when getting user

What do you mean by single app? I have one app but in Modular solution. Do I need it? If not How can I remove them?

I see. I installed Docker and Redis and all is working. While creating the template I cant remember that I said I need AbpDistributedLock! why has this been added? Can I remove it?

That what I wonder! Do I need to have one? I dont want to have it at this stage! Is it required by the Abp?

Showing 1 to 10 of 13 entries
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 28, 2026, 11:44
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.