elsa-workflows / elsa-workflows/elsa-core

Admin user cannot create roles/users for newly created tenants due to tenant resolution failing

Open
#7,280 0 comments 0 reactions 0 assignees View on GitHub
triaged
Dominant language
C#
Stars
7.9k
Forks
1.5k
Avg merge
15h 22m
Merged PRs (30d)
114

Description

## The Problem

I'm implementing a multi-tenant system where an admin user (AdminUserProvider) needs to:
1. Create a new tenant
2. Create roles and users for that tenant (using `X-Tenant-ID` header to switch context)
However, when I set the `X-Tenant-ID` header to target a newly created tenant, the tenant resolution fails and returns `null`.

## Root Cause

- tenantsProvider.ListAsync() is filtered by the global query filter (WHERE TenantId = current OR TenantId = '*')

```csharp
public class SetTenantIdFilter : IEntityModelCreatingHandler
{
///
public void Handle(ElsaDbContextBase dbContext, ModelBuilder modelBuilder, IMutableEntityType entityType)
{
if (!typeof(Entity).IsAssignableFrom(entityType.ClrType))
return;

modelBuilder
.Entity(entityType.ClrType)
.HasQueryFilter(CreateTenantFilterExpression(dbContext, entityType.ClrType));
}

private LambdaExpression CreateTenantFilterExpression(ElsaDbContextBase dbContext, Type clrType)
{
var parameter = Expression.Parameter(clrType, "e");

// e => EF.Property(e, "TenantId") == this.TenantId || EF.Property(e, "TenantId") == "*"
var tenantIdProperty = Expression.Call(
typeof(EF),
nameof(EF.Property),
[typeof(string)],
parameter,
Expression.Constant("TenantId"));

var tenantIdOnContext = Expression.Property(
Expression.Constant(dbContext),
nameof(ElsaDbContextBase.TenantId));

var equalityCheck = Expression.Equal(tenantIdProperty, tenantIdOnContext);
var agnosticCheck = Expression.Equal(tenantIdProperty, Expression.Constant(Tenant.AgnosticTenantId, typeof(string)));
var body = Expression.OrElse(equalityCheck, agnosticCheck);

return Expression.Lambda(body, parameter);
}
}
```
What is the recommended approach for this scenario in Elsa Core ?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.