![]() |
VOOZH | about |
dotnet add package BioTrace.Elsa.Abp.Studio.BlazorWasm --version 1.1.0
NuGet\Install-Package BioTrace.Elsa.Abp.Studio.BlazorWasm -Version 1.1.0
<PackageReference Include="BioTrace.Elsa.Abp.Studio.BlazorWasm" Version="1.1.0" />
<PackageVersion Include="BioTrace.Elsa.Abp.Studio.BlazorWasm" Version="1.1.0" />Directory.Packages.props
<PackageReference Include="BioTrace.Elsa.Abp.Studio.BlazorWasm" />Project file
paket add BioTrace.Elsa.Abp.Studio.BlazorWasm --version 1.1.0
#r "nuget: BioTrace.Elsa.Abp.Studio.BlazorWasm, 1.1.0"
#:package BioTrace.Elsa.Abp.Studio.BlazorWasm@1.1.0
#addin nuget:?package=BioTrace.Elsa.Abp.Studio.BlazorWasm&version=1.1.0Install as a Cake Addin
#tool nuget:?package=BioTrace.Elsa.Abp.Studio.BlazorWasm&version=1.1.0Install as a Cake Tool
基于 ABP Framework 的可复用模块,仅解决在既有 ABP 调用方应用中集成 Elsa Workflows 3.7 与 Elsa Studio(OpenIddict 权限桥接、多租户、同域 Hosted WASM)。不包含本模块自有业务实体;ABP 业务库由调用方既有 Identity / OpenIddict / Permission 等模块维护。
| 文档 | 说明 |
|---|---|
| 其他项目引用 NuGet 包、配置双库、权限与 OpenIddict 的完整教程 | |
Installer / abp add-module |
本模块安装器行为与安装后必做步骤 |
调用方 appsettings.json 模板(连接串、Elsa 选项、CORS、OpenIddict 客户端) |
|
| / | 可合并的 Elsa / OpenIddict / Studio 配置;配合 |
| UI 主题与 Studio OIDC、租户登录差异 | |
| 小版本升级自检(非官方迁移指南) | |
调用方 HttpApi.Host.Tests 最小示例 |
|
| NuGet 版本变更记录 | |
| 开发、测试与 PR 流程 |
BioTrace.Elsa.Abp.AspNetCore不捆绑数据库 Provider;调用方需引用Elsa.Persistence.EFCore.{PostgreSql|SqlServer|Sqlite}并重写ConfigureElsaPersistence(演示见ElsaAbpHostPostgreSqlModule)。Elsa 表结构迁移见 Elsa 官方文档;升级自检见 。
src/
BioTrace.Elsa.Abp.Domain.Shared
BioTrace.Elsa.Abp.Domain
BioTrace.Elsa.Abp.Application.Contracts
BioTrace.Elsa.Abp.Application # 含示例 Activity(PrintMessageActivity)
BioTrace.Elsa.Abp.EntityFrameworkCore # 演示 Host / 单元测用 ABP DbContext(不发布 NuGet)
BioTrace.Elsa.Abp.AspNetCore # Elsa 集成入口(连接名 Elsa;不含 EF Provider)
BioTrace.Elsa.Abp.HttpApi
BioTrace.Elsa.Abp.HttpApi.Client
BioTrace.Elsa.Abp.Installer
BioTrace.Elsa.Abp.Studio.BlazorWasm # Elsa Studio ABP 集成 RCL(租户/权限/组件)
BioTrace.Elsa.Abp.Studio.AspNetCore # Hosted WASM 服务端扩展
BioTrace.Elsa.Abp.Studio.Client # 演示用 Studio WASM 壳三文件样板(不发布 NuGet;可用 scaffold 脚本生成)
host/ # 仅本地验证,不发布 NuGet
BioTrace.Elsa.Abp.HttpApi.Host # 集成演示与 E2E(含 /studio)
BioTrace.Elsa.Abp.DbMigrator # 生产迁移样板(ABP 库 → Elsa force 迁移)
test/
BioTrace.Elsa.Abp.TestBase
BioTrace.Elsa.Abp.AspNetCore.Tests
BioTrace.Elsa.Abp.Application.Tests
BioTrace.Elsa.Abp.Domain.Tests
BioTrace.Elsa.Abp.EntityFrameworkCore.Tests
BioTrace.Elsa.Abp.HttpApi.Host.Tests # 演示项目集成测(Contributor + OpenIddict + Elsa API)
BioTrace.Elsa.Abp.E2E # Playwright 浏览器 E2E(npm,不在 slnx)
DbMigrator 连接串: 示例库名为
BioTraceElsaAbp/BioTraceElsaAbp_Elsa,与演示 Host 的BioTrace_Abp/BioTrace_Elsa不同——复制配置时需改库名。生产环境建议Elsa:RunMigrations=false,由 DbMigrator 调用MigrateElsaDatabasesAsync(force: true)。
从 NuGet 引用时的逐步教程见 ;配置模板见 。若偏好 CLI,可先执行
abp add-module BioTrace.Elsa.Abp添加包与[DependsOn],再完成下文手动步骤。
引用本模块的 ABP 应用必须单独配置 Elsa 连接串与持久化;Elsa 工作流库与 ABP 业务库分离维护。
[DependsOn(typeof(MyAppElsaPostgreSqlModule), typeof(AbpHttpApiModule))]
// MyAppElsaPostgreSqlModule 继承 ElsaAbpAspNetCoreModule 并重写 ConfigureElsaPersistence
appsettings.json 中配置独立连接串(Default 为 ABP 业务库,Elsa 为工作流库)与 Elsa 选项(节选):
{
"ConnectionStrings": {
"Default": "Host=...;Database=your_abp_db;...",
"Elsa": "Host=...;Database=your_elsa_db;..."
},
"Elsa": {
"RunMigrations": true,
"EnableWorkflowsApi": true,
"EnableElsaSwagger": true,
"EnableHttpActivities": true,
"EnablePermissionClaimsBridge": true
}
}
OnApplicationInitialization 中映射 Elsa 中间件(可调用扩展方法 app.UseElsaWorkflows())。ElsaAbpAspNetCoreModule,重写 ConfigureElsaPersistence(Provider)与 ConfigureElsaActivities(Activity)。未配置 ConnectionStrings:Elsa 时,启动将抛出 Abp:ElsaConnectionStringNotConfigured;未重写 ConfigureElsaPersistence 时抛出 Abp:ElsaPersistenceNotConfigured。
ElsaAbpOptions 常用选项完整说明见 。
| 属性 | 默认值 | 说明 |
|---|---|---|
RunMigrations |
true |
注册启动时 Elsa 库迁移;Provider 应设 ef.RunMigrations = false |
MigrateOnlyInDevelopment |
true |
生产设为 false 或改用 DbMigrator |
DeferTenantActivationUntilReady |
false |
DbMigrator / K8s 冷启动建议 true |
EnableWorkflowsApi |
true |
启用 /elsa/api/* |
EnableElsaSwagger |
开发环境 true |
FastEndpoints OpenAPI:/swagger/elsa |
EnableHttpActivities |
true |
elsa.UseHttp() |
EnablePermissionClaimsBridge |
true |
ABP 权限 → JWT permissions Claim |
DisableElsaEndpointSecurity |
false |
仅 Development 可禁用 Elsa 端点安全 |
EnableMultiTenancy |
false |
引用 ElsaAbpMultiTenancyModule 时自动为 true |
调用方在既有 ABP 解决方案根目录执行:
abp add-module BioTrace.Elsa.Abp
或在 ABP Studio 中 Install module → 选择 BioTrace.Elsa.Abp。安装元数据由 BioTrace.Elsa.Abp.Installer 提供(BioTrace.Elsa.Abp.abpmdl 与各 .abppkg)。
ABP CLI / Studio 本身的安装与升级请参阅 ABP 官方文档。本节仅说明本模块安装器会做什么、不会做什么。
安装器会下载 BioTrace.Elsa.Abp.Installer,按 .abpmdl 与各包 .abppkg 的 role 向对应层项目添加 NuGet 引用,并在启动模块写入 [DependsOn(...)](典型包括 BioTrace.Elsa.Abp.AspNetCore、BioTrace.Elsa.Abp.HttpApi 及传递依赖;Studio 相关包按项目角色挂载)。
注意:安装器不会添加
BioTrace.Elsa.Abp.EntityFrameworkCore(仅本仓库演示 Host,不发布 NuGet)、Elsa.Persistence.EFCore.{Provider},也不会代为配置 Identity / OpenIddict / Permission——见 。
| 步骤 | 安装器 | 调用方手动 |
|---|---|---|
添加本模块 NuGet 与 [DependsOn] |
✅ | — |
引用 Elsa.Persistence.EFCore.{Provider} |
❌ | ✅ 自选 Provider |
继承 ElsaAbpAspNetCoreModule 并重写 ConfigureElsaPersistence |
❌ | ✅ |
配置 ConnectionStrings:Default 与 ConnectionStrings:Elsa |
❌ | ✅ |
Host 管道:UseMultiTenancy() → UseElsaAbpMultiTenancy() → UseElsaWorkflows() |
❌ | ✅ |
角色授予 Abp.Elsa.* 权限 |
❌ | ✅ |
Elsa Studio(可选):ElsaStudio / OpenIddict 客户端与 WASM 注册 |
❌ | ✅ |
完整步骤与配置模板见 与 。安装包内说明见 。
本模块不启用 Elsa.Identity,由调用方 OpenIddict 签发单一 JWT,同时保护 ABP API 与 Elsa Workflows API(FastEndpoints 校验 Principal 上的 permissions Claim)。
Abp.Elsa.*,用于角色/用户授权与审计。read:workflow-definitions 等,由 ElsaAbpPermissionClaimsPrincipalContributor 在请求时从 ABP 权限映射注入。IElsaAbpEffectivePermissionsProvider 供 Claims 桥接与 Studio 当前用户 API 共用。GET /api/abp/elsa/current-user(别名 GET /identity/users/me)获取最新 permissions 数组。开发环境(ASPNETCORE_ENVIRONMENT=Development)演示项目 Program.cs 在 InitializeApplicationAsync 之后依次执行:
ElsaAbpHostDatabaseMigrationHostedService — 迁移 ABP 业务库(AbpDbContext、Identity、OpenIddict、Permission、TenantManagement)MigrateElsaDatabasesAsync — 迁移 Elsa 工作流库(由 Elsa:RunMigrations 控制)IDataSeeder — 种子数据(Host admin、OpenIddict 客户端、租户与用户等)ElsaAbpTenantDemoWorkflowSeeder — 演示租户工作流定义appsettings.json 示例(端口与 launchSettings.json 一致):
{
"App": {
"CorsOrigins": ["https://localhost:44388"]
},
"AuthServer": {
"Authority": "https://localhost:44388",
"SwaggerClientId": "BioTrace_Elsa_Abp_Swagger"
},
"OpenIddict": {
"Applications": {
"ElsaStudio": {
"ClientId": "ElsaStudio",
"RootUrl": "https://localhost:44388/studio",
"RedirectUris": [
"https://localhost:44388/studio/authentication/login-callback"
]
}
}
},
"ElsaStudio": {
"Enabled": true,
"PathBase": "/studio"
},
"Elsa": {
"EnableElsaSwagger": true,
"EnablePermissionClaimsBridge": true,
"DisableElsaEndpointSecurity": false
}
}
AllowCredentials(),禁止 AllowAnyOrigin() 与 OIDC 混用。/studio;Code Flow 客户端 ElsaStudio。Elsa:DisableElsaEndpointSecurity=true;生产建议 Elsa:EnableElsaSwagger=false。| 文档 | OpenAPI JSON | UI |
|---|---|---|
| BioTrace.Elsa.Abp API | https://localhost:44388/swagger/v1/swagger.json |
https://localhost:44388/swagger(OAuth2) |
| Elsa Workflows API | https://localhost:44388/swagger/elsa/openapi.json |
https://localhost:44388/swagger/elsa,或在 ABP UI 下拉选择 Elsa Workflows API |
BioTrace_Elsa_Abp_Swagger,Scope BioTrace_Elsa_Abp。FastEndpoints.Swagger 生成,需 Bearer JWT(不支持 ABP Swagger 的 OAuth 一键授权)。access_token 填入 Elsa Swagger 的 Bearer 字段即可试用 API。Elsa API 校验的是请求时由 ElsaAbpPermissionClaimsPrincipalContributor 注入的 permissions Claim(如 read:workflow-definitions),不是 ABP 权限名字符串。ABP Swagger 的 GET /api/abp/elsa/current-user 仍用于查看当前用户的 Elsa 权限列表。
| ABP 权限 | Elsa Claim / 行为 |
|---|---|
Abp.Elsa.Admin |
* |
Abp.Elsa.WorkflowDefinitions.Read |
read:workflow-definitions |
Abp.Elsa.WorkflowDefinitions.Write |
write:workflow-definitions |
Abp.Elsa.WorkflowDefinitions.Publish |
publish:workflow-definitions |
Abp.Elsa.WorkflowInstances.Execute |
execute:workflow-instances |
Abp.Elsa.HttpEndpoints.Invoke |
HTTP Trigger 走 ABP 权限(AbpHttpEndpointAuthorizationHandler,非 Claim) |
Abp.Elsa.NotReadOnly |
满足 Elsa NotReadOnlyRequirement(AbpElsaNotReadOnlyAuthorizationHandler 扩展,非 Claim) |
完整常量见 AbpElsaPermissions 与 ElsaApiPermissionNames(Application.Contracts)。
本模块可选启用 ABP 多租户 + Elsa Elsa.Tenants 行级隔离(单一 ConnectionStrings:Elsa,按 TenantId 列过滤,无需每租户独立 Elsa 连接串)。若调用方不需要多租户,勿引用 ElsaAbpMultiTenancyModule。
TenantManagement(AbpTenants);不启用 Elsa 自带 Tenant CRUD API。ICurrentTenant → ElsaAbpTenantMapper(Host → "",租户 → Guid.ToString("D"))→ Elsa ITenantAccessor。ElsaAbpMultiTenancyModule(调用方按需引用)。UseAuthentication → UseAbpOpenIddictValidation → UseMultiTenancy() → UseAuthorization → UseElsaAbpMultiTenancy() → UseElsaWorkflows()。{
"MultiTenancy": { "IsEnabled": true },
"ConnectionStrings": {
"Default": "Host=...;Database=BioTrace_Abp;...",
"Elsa": "Host=...;Database=BioTrace_Elsa;..."
},
"Elsa": {
"EnableMultiTenancy": true,
"DeferTenantActivationUntilReady": false
}
}
MultiTenancyConsts.IsEnabled(Domain.Shared)当前编译为 true;调用方 MultiTenancy:IsEnabled 配置须与之匹配。API / Studio 请求需携带 ABP 标准 __tenant Header(或 Query),或依赖 JWT 内 tenantid Claim(OpenIddict 自动写入)。
Host 级 admin 默认只见 Host 租户(TenantId 为空)下的工作流;在 Elsa Studio 右上角租户下拉中选择 Tenant A 后,出站请求会自动附加 __tenant: tenant-a。租户用户(如 tenant-a-admin)登录后自动锁定所属租户并附带同名 Header。
常见现象
- 若流程是在 Host 上下文(未选租户)下创建的,其
TenantId为空,仅admin在 Host 视图下可见;租户用户列表为空。请切换到目标租户后再创建,或依赖演示种子工作流。- 租户用户通过 OIDC 登录时,须在调用方登录页填写/选择租户(或访问
https://localhost:44388/Account/Login?__tenant=tenant-a),否则 Token 可能缺少tenantidClaim。- 切换登录账户后 Studio 会强制刷新页面;若仍显示上一用户数据,请先 Logout 再登录。
host/BioTrace.Elsa.Abp.HttpApi.Host 为本地验证与 CI 测试用,不随 NuGet 发布。除本模块外,它还引用 Identity / OpenIddict / PermissionManagement EF 模块;在既有调用方应用中集成时,沿用调用方已有模块即可。
Elsa Server 与 Studio 前端均为 3.7.0(见根目录 Directory.Build.props 中 ElsaPackageVersion)。
docker compose up -d
# 首次或更新 Basic Theme 依赖后:安装演示项目前端库(登录页 /Account/Login 需要)
cd host/BioTrace.Elsa.Abp.HttpApi.Host && npm install && cd ../..
dotnet run --project host/BioTrace.Elsa.Abp.HttpApi.Host
演示项目已种子 OpenIddict 公共客户端 ElsaStudio(Authorization Code + PKCE)。Studio 由 HttpApi.Host 同域 Hosted WASM 提供,路径 /studio,OIDC 跳转至 /Account/Login(Basic Theme)。
| 地址 | 说明 |
|---|---|
| https://localhost:44388/studio | Elsa Studio(勿在末尾多加 /) |
| https://localhost:44388/swagger | ABP Swagger |
| https://localhost:44388/swagger/elsa | Elsa Swagger |
https://localhost:44388/elsa/api/* |
Elsa Workflows API |
src/BioTrace.Elsa.Abp.Studio.Client/wwwroot/appsettings.jsonhost/BioTrace.Elsa.Abp.HttpApi.Host/appsettings.json 中 ElsaStudio 与 OpenIddict:Applications:ElsaStudiodocker/postgres/init 会创建 BioTrace_Abp、BioTrace_Elsa 及测试/E2E 用库共六个库1q2w3E*)| 租户 | 用户 | 角色 / 说明 |
|---|---|---|
| Host | admin |
Host 级 admin;Abp.Elsa.Admin → Elsa * |
tenant-a |
tenant-a-admin |
租户内 admin,写/执行/取消等 Elsa 权限 |
tenant-a |
tenant-a-designer |
租户内 designer,只读 |
tenant-b |
tenant-b-admin |
租户内 admin,用于隔离验证 |
tenant-b |
tenant-b-designer |
租户内 designer,只读 |
调用方如何安装包、配置数据库与权限,见 。维护者发布流程见 。
| 场景 | 在调用方项目中显式引用的包 |
|---|---|
| Elsa Workflows API + 权限桥接 | BioTrace.Elsa.Abp.AspNetCore、BioTrace.Elsa.Abp.HttpApi |
| Elsa EF 持久化 | 调用方自选 Elsa.Persistence.EFCore.{PostgreSql\|SqlServer\|Sqlite}(3.7.0) |
| 同域托管 Elsa Studio | BioTrace.Elsa.Abp.Studio.BlazorWasm、BioTrace.Elsa.Abp.Studio.AspNetCore |
AspNetCore 会传递依赖 Application、Domain、Application.Contracts、Domain.Shared,一般无需逐个安装。调用方已有 ABP Identity / OpenIddict / Permission 的 EF 模块即可,无需引用本仓库的 EntityFrameworkCore 项目。
| 包名 | 说明 |
|---|---|
BioTrace.Elsa.Abp.AspNetCore |
集成入口(Elsa 注册、权限桥接、多租户) |
BioTrace.Elsa.Abp.HttpApi |
current-user 等 ABP API |
BioTrace.Elsa.Abp.Studio.BlazorWasm |
Studio UI 与 ABP 租户/权限组件 |
BioTrace.Elsa.Abp.Studio.AspNetCore |
调用方内嵌 /studio 托管扩展(不含 WASM 壳) |
BioTrace.Elsa.Abp.Application |
示例 Activity 等(AspNetCore 传递) |
BioTrace.Elsa.Abp.Application.Contracts |
权限常量、DTO(传递或单独引用) |
BioTrace.Elsa.Abp.Domain / Domain.Shared |
选项与常量(传递) |
BioTrace.Elsa.Abp.HttpApi.Client |
可选:动态 API 代理 |
BioTrace.Elsa.Abp.Installer |
可选:ABP CLI / Studio 安装元数据 |
BioTrace.Elsa.Abp.IntegrationTesting |
可选:集成测试 WebApplicationFactory 与 OpenIddict 辅助 |
本项目采用 开源。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
Showing the top 1 NuGet packages that depend on BioTrace.Elsa.Abp.Studio.BlazorWasm:
| Package | Downloads |
|---|---|
|
BioTrace.Elsa.Abp.Studio.AspNetCore
ABP reusable module for integrating Elsa 3.7 workflows with OpenIddict authorization and configurable EF Core persistence. |
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.1.1-preview.10 | 0 | 6/18/2026 |
| 1.1.1-preview.9 | 0 | 6/18/2026 |
| 1.1.0 | 44 | 6/16/2026 |
| 1.1.0-preview.6 | 48 | 6/15/2026 |
| 1.0.1-preview.7 | 54 | 6/16/2026 |
| 1.0.1-preview.5 | 46 | 6/15/2026 |
| 1.0.1-preview.4 | 51 | 6/15/2026 |
| 1.0.1-preview.3 | 57 | 6/12/2026 |
| 1.0.1-preview.2 | 52 | 6/12/2026 |
| 1.0.0-preview.1 | 49 | 6/11/2026 |