项目

Elsa 模块(专业版)

必须拥有 ABP Team 或更高级别的许可证才能使用此模块。

本模块将 Elsa 工作流 集成到 ABP 框架应用程序中,旨在让开发者能够轻松地在基于 ABP 的项目中使用 Elsa 的功能。如需自行创建、管理和自定义工作流,请参阅 官方 Elsa 文档

如何安装

Elsa 模块默认未安装在 启动模板 中,必须手动安装。有两种方式可以将模块安装到您的应用程序中,以下各节将分别介绍这两种方法。

使用 ABP CLI

ABP CLI 允许使用 add-module 命令向解决方案添加模块。您可以查看其 文档 了解更多信息。因此,可以使用以下命令添加 Elsa 模块:

abp add-module Volo.Elsa

手动安装

如果您修改了解决方案结构,使用 ABP CLI 添加模块可能无法正常工作。在这种情况下,您可以手动将 Elsa 模块添加到解决方案中。

为此,请将下面列出的包添加到解决方案中对应的项目中。例如,将 Volo.Abp.Elsa.Application 包添加到您的 {项目名称}.Application.csproj 中,如下所示:

<PackageReference Include="Volo.Abp.Elsa.Application" Version="x.x.x" />

添加包引用后,打开项目的模块类(例如:{项目名称}ApplicationModule),并将以下代码添加到 DependsOn 属性中:

[DependsOn(
  //...
  typeof(AbpElsaApplicationModule)
)]

如果您使用的是 Blazor Web App,需要将 Volo.Elsa.Admin.Blazor.WebAssembly 包添加到 {项目名称}.Blazor.Client.csproj 项目,并将 Volo.Elsa.Admin.Blazor.Server 包添加到 {项目名称}.Blazor.csproj 项目。

Elsa 模块

Elsa Workflows 拥有自己的数据库提供程序,并且拥有租户/角色/用户系统。它们正在积极开发中,因此 ABP Elsa 模块尚未完全集成。以下是 ABP Elsa 模块中各模块的当前状态:

  • AbpElsaAspNetCoreModule(Volo.Elsa.Abp.AspNetCore) 模块用于集成 Elsa 认证。
  • AbpElsaIdentityModule(Volo.Elsa.Abp.Identity) 模块用于集成 ABP Identity 认证。
  • AbpElsaApplicationModule(Volo.Elsa.Abp.Application)AbpElsaApplicationContractsModule(Volo.Elsa.Abp.Application.Contracts) 模块用于定义 Elsa 权限。

其余项目/模块基本上是空的,未来将根据 Elsa 功能进行实现:

  • AbpElsaDomainModule(Volo.Elsa.Abp.Domain)
  • AbpElsaEntityFrameworkCoreModule(Volo.Elsa.Abp.EntityFrameworkCore)
  • AbpElsaHttpApiModule(Volo.Elsa.Abp.HttpApi)
  • AbpElsaHttpApiClientModule(Volo.Elsa.Abp.HttpApi.Client)
  • AbpElsaBlazorModule(Volo.Elsa.Abp.Blazor)
  • AbpElsaBlazorServerModule(Volo.Elsa.Abp.Blazor.Server)
  • AbpElsaBlazorWebAssemblyModule(Volo.Elsa.Abp.Blazor.WebAssembly)
  • AbpElsaWebModule(Volo.Elsa.Abp.Web)

Elsa 模块权限

Elsa Workflow API 端点会检查权限。此外,它还有一个 * 通配符权限,允许所有权限。

ABP Elsa 模块定义了 Elsa 工作流中使用的所有权限。您可以使用 ABP 权限管理模块来管理这些权限。

AbpElsaAspNetCoreModule(Volo.Elsa.Abp.AspNetCore) 模块将检查并将这些权限添加到当前用户的声明中:

Elsa 权限

您还可以将部分权限授予角色或用户。它将在当前用户的 CookiesToken 中添加 permissions 声明。Elsa 服务器将读取这些声明并允许或拒绝访问:

Elsa 部分权限

Elsa Studio

Elsa Studio 是一个 独立的 Web 应用程序,允许您设计、管理和执行工作流。它是使用 Blazor Server/WebAssembly 构建的。

Elsa Studio 需要进行身份验证,有两种方式可以对 Elsa Studio 进行身份验证:

  • 密码流认证
  • 授权码流认证

Elsa Studio - 密码流认证

AbpElsaIdentityModule(Volo.Elsa.Abp.Identity) 模块用于与 ABP Identity 模块 集成,以根据 ABP Identity 检查 Elsa Studio 的 用户名密码

在 Elsa 服务器项目中配置 Elsa 时,您需要将 UseIdentity 替换为 UseAbpIdentity,如下所示:

context.Services
    .AddElsa(elsa => elsa
        .UseAbpIdentity(identity =>
        {
            identity.TokenOptions = options => options.SigningKey = "large-signing-key-for-signing-JWT-tokens";
        });
    );

之后,您可以在 Elsa Studio 客户端项目中添加以下代码,以使用 Identity 作为登录方法:

builder.Services.AddLoginModule().UseElsaIdentity();

然后,您可以使用默认凭据(用户名为 admin,密码为 1q2w3E*)登录 Elsa Studio 应用程序:

elsa 登录

登录应用程序后,您可以开始定义工作流、管理它们并查看它们的执行实例等:

elsa 主页面

Elsa Studio - 授权码流认证

ABP 应用程序使用 OpenIddict 进行身份验证。因此,您可以使用 授权码流 对 Elsa Studio 进行身份验证。

为此,您可以在 Elsa Studio 客户端项目中添加以下代码块:

builder.Services.AddLoginModule().UseOpenIdConnect(connectConfiguration =>
{
    var authority = configuration["AuthServer:Authority"]!.TrimEnd('/'); // 您的服务器 URL
    connectConfiguration.AuthEndpoint = $"{authority}/connect/authorize";
    connectConfiguration.TokenEndpoint = $"{authority}/connect/token";
    connectConfiguration.EndSessionEndpoint = $"{authority}/connect/endsession";
    connectConfiguration.ClientId = configuration["AuthServer:ClientId"]!;
    connectConfiguration.Scopes = ["openid", "profile", "email", "phone", "roles", "offline_access", "ElsaDemoAppServer"];
});

之后,Elsa Studio 将重定向到您的 ABP 应用程序的登录页面,登录成功后重定向回 Elsa Studio。

Elsa 工作流 - 示例工作流演示

ABP 提供了一个完整的演示应用程序,展示如何在您的 ABP 应用程序中使用 Elsa 模块。如果您在任何地方遇到困难,可以下载演示应用程序并查看集成点。请参阅 Elsa 工作流 - 示例工作流演示 页面了解更多信息。

在本文档中