项目

身份模块(专业版)

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

此模块实现了应用程序的用户和角色系统;

  • 基于 微软的 ASP.NET Core Identity 库构建。
  • 管理系统中的角色用户。允许用户拥有多个角色
  • 在角色和用户级别设置权限
  • 为每个用户启用/禁用双因素身份验证和用户锁定
  • 管理基本的用户资料密码
  • 管理系统中的声明类型,为角色和用户设置声明。
  • 设置页面以管理密码复杂性、用户登录、帐户和锁定。
  • 支持 LDAP 身份验证。
  • 支持定期密码更改(密码时效性)
  • 提供电子邮件和电话号码验证。
  • 支持社交登录集成(Twitter、Facebook、GitHub 等)。
  • 管理系统中的组织单元
  • 查看系统中的安全日志(登录、注销、更改密码等)。
  • 用户导出/导入到 Excel 和 CSV 文件(也支持导入外部用户)。

有关模块功能的概述,请参见 模块描述页面

如何安装

身份模块已预装在 启动模板 中。因此,无需手动安装。

此模块遵循 模块开发最佳实践指南 并由多个 NuGet 和 NPM 包组成。如果您想了解这些包及其之间的关系,请参阅该指南。

您可以访问 身份模块包列表页面 查看与此模块相关的包列表。

用户界面

菜单项

身份模块将以下项目添加到“主”菜单中的“管理”菜单项下:

  • 角色:角色管理页面。
  • 用户:用户管理页面。
  • 声明类型:声明类型管理页面。
  • 组织单元:组织单元管理页面。
  • 安全日志:安全日志搜索页面。

IdentityMenuNames 类包含菜单项名称的常量。

页面

角色管理

角色页面用于管理系统中的角色。角色是分配给用户的一组权限。

identity-role-page

您可以在此页面创建新角色或编辑角色:

identity-edit-role-modal

  • 默认角色默认分配给新用户。
  • 公开角色对其他用户可见。
角色权限

您可以管理角色的权限:

identity-edit-role-permissions-modal

  • 权限是授予角色和用户的应用程序操作
  • 拥有角色的用户将继承授予该角色的所有权限。
  • 任何模块都可以**定义权限**。一旦您定义了新权限,它将在此页面可用。
  • 左侧是模块列表。点击模块名称,您可以勾选/取消勾选与该模块相关的权限。
角色声明

您可以为角色设置自定义声明值:

identity-edit-role-claims-modal

声明类型从声明类型管理页面(见下文)定义的声明列表中检索。

用户管理

用户页面用于管理您系统中的用户。

identity-users-page

您可以在此页面创建新用户或编辑现有用户:

identity-user-edit-modal

  • 用户可以在系统中拥有零个或多个角色
  • 您可以为每个用户设置双因素验证和用户锁定设置。
用户权限

用户拥有分配角色权限的并集。身份模块还允许为特定用户授予额外权限。

identity-edit-user-permissions-modal

用户声明

您还可以为用户设置自定义声明值:

identity-edit-user-claims-modal

声明类型从声明类型管理页面(见下文)定义的声明列表中检索。

声明类型管理

身份模块允许定义自定义声明类型。

identity-claim-type-page

  • 自定义声明可用于为用户或角色存储附加信息。
  • 然后可以在应用程序代码中访问已验证用户的自定义声明值。
  • 如果您正在使用 OpenIddict 模块,声明类型也会被它使用。

身份模块设置用户界面

身份模块在设置页面添加一个新标签页,以在运行时自定义行为。

identity-settings-ui

组织单元

组织单元页面用于管理组织单元、组织单元的成员以及组织单元的角色。

identity-organization-units-ui-page

您可以在此页面添加新的组织单元或编辑现有的组织单元。要添加新的根组织单元,请点击“添加根单元”按钮并填写打开的表格。

identity-organization-units-add-modal

要向现有组织单元添加子单元,请在现有组织单元上右键单击并点击“添加子单元”上下文菜单项。同样,要编辑组织单元,请在现有组织单元上右键单击并点击“编辑”上下文菜单项。

identity-organization-units-edit-modal

您可以通过选择组织单元或在组织单元树上的项目上右键单击,使用成员选项卡管理组织单元的成员。

identity-organization-units-ui-add-member

您可以通过成员选项卡或在组织单元树上的项目上右键单击来管理组织单元的角色。组织单元继承其角色的权限。

identity-organization-units-ui-add-role

安全日志

安全日志页面用于搜索和查看系统中与身份验证相关的操作(登录、注销、更改密码等)。

identity-security-logs-ui-page

此外,每个用户都可以查看其帐户的安全日志,如下面的屏幕截图所示;

identity-security-logs-ui-my-logs-page

数据种子

此模块在运行 .DbMigrator 应用程序时向数据库添加一些初始数据(参见 数据种子系统):

  • 创建一个具有所有授予权限的 admin 角色。
  • 创建一个具有 admin 角色和密码为 1q2w3E*admin 用户。

在生产环境中首次运行应用程序时,您通常会更改此密码。但如果您想更改种子数据的密码,请在解决方案中找到 ProjectNameDbMigrationService,定位到 MigrateAsync 方法。会有这样一行:

await _dataSeeder.SeedAsync();

像这样更改它:

await _dataSeeder.SeedAsync(
    new DataSeedContext()
        .WithProperty("AdminPassword", "myPassW00rd42")
);

就像密码一样,您也可以设置管理员电子邮件(在这种情况下使用 AdminEmail 键)。

身份模块的 数据种子贡献者 类是 IdentityDataSeedContributor,它在内部使用 IIdentityDataSeeder 服务。

选项

AbpIdentityAspNetCoreOptions

AbpIdentityAspNetCoreOptions 可以在 UI 层的 模块ConfigureServices 方法中配置。示例:

Configure<AbpIdentityAspNetCoreOptions>(options =>
{
    //在此设置选项...
});

AbpIdentityAspNetCoreOptions 属性:

  • ConfigureAuthentication(默认值:true):身份模块默认调用 AddAuthenticationAddIdentityCookies 扩展方法来为 Identity 库配置身份验证。它将 DefaultScheme 设置为 IdentityConstants.ApplicationScheme,将 DefaultSignInScheme 设置为 IdentityConstants.ExternalScheme。您可以将其设置为 false 以禁止它并自行配置。

内部结构

领域层

聚合

此模块遵循 实体最佳实践与约定 指南。

用户

用户通常是登录并使用应用程序的人。

  • IdentityUser(聚合根):表示系统中的用户。
    • IdentityUserRole(集合):用户的角色。
    • IdentityUserClaim(集合):用户的自定义声明。
    • IdentityUserLogin(集合):用户的外部登录。
    • IdentityUserToken(集合):用户的令牌(由 Microsoft Identity 服务使用)。
角色

角色通常是分配给用户的一组权限。

  • IdentityRole(聚合根):表示系统中的角色。
    • IdentityRoleClaim(集合):角色的自定义声明。
声明类型

声明类型是自定义声明的定义,可以分配给系统中的其他实体(如角色和用户)。

  • IdentityClaimType(聚合根):表示声明类型定义。它包含一些属性(例如 Required、Regex、Description、ValueType)来定义声明类型和验证规则。
身份安全日志

IdentitySecurityLog 表示系统中的身份验证相关操作。

  • IdentitySecurityLog(聚合根):表示系统中的安全日志。
组织单元

组织单元是层次结构中的一个实体。

  • OrganizationUnit(聚合根):表示系统中的组织单元。
    • Roles(集合):组织单元的角色。

仓储

此模块遵循 仓储最佳实践与约定 指南。

为此模块定义了以下自定义仓储:

  • IIdentityUserRepository
  • IIdentityRoleRepository
  • IIdentityClaimTypeRepository
  • IIdentitySecurityLogRepository
  • IOrganizationUnitRepository

领域服务

此模块遵循 领域服务最佳实践与约定 指南。

用户管理器

IdentityUserManager 用于管理用户、其角色、声明、密码、电子邮件等。它派生自 Microsoft Identity 的 UserManager<T> 类,其中 TIdentityUser

角色管理器

IdentityRoleManager 用于管理角色及其声明。它派生自 Microsoft Identity 的 RoleManager<T> 类,其中 TIdentityRole

声明类型管理器

IdenityClaimTypeManager 用于对 IdentityClaimType 聚合根执行一些操作。

组织单元管理器

OrganizationUnitManager 用于对 OrganizationUnit 聚合根执行一些操作。

安全日志管理器

IdentitySecurityLogManager 用于保存安全日志。

设置

有关为此模块定义的所有设置,请参见 IdentitySettingNames 类成员。

应用层

应用服务

  • IdentityUserAppService(实现 IIdentityUserAppService):实现用户管理 UI 的用例。
  • IdentityRoleAppService(实现 IIdentityRoleAppService):实现角色管理 UI 的用例。
  • IdentityClaimTypeAppService(实现 IIdentityClaimTypeAppService):实现声明类型管理 UI 的用例。
  • IdentitySettingsAppService(实现 IIdentitySettingsAppService):用于获取和更新身份模块的设置。
  • IdentityUserLookupAppService(实现 IIdentityUserLookupAppService):用于通过 iduserName 获取用户信息。旨在供 ABP 内部使用。
  • ProfileAppService(实现 IProfileAppService):用于更改用户的资料和密码。
  • IdentitySecurityLogAppService(实现 IIdentitySecurityLogAppService):实现安全日志 UI 的用例。
  • OrganizationUnitAppService(实现 OrganizationUnitAppService):实现组织单元管理 UI 的用例。

数据库提供程序

通用

表/集合前缀和架构

默认情况下,所有表/集合都使用 Abp 前缀。如果您需要更改表前缀或设置架构名称(如果您的数据库提供程序支持),请设置 AbpIdentityDbProperties 类上的静态属性。

连接字符串

此模块使用 AbpIdentity 作为连接字符串名称。如果您未使用此名称定义连接字符串,则它将回退到 Default 连接字符串。

有关详细信息,请参阅 连接字符串 文档。

Entity Framework Core

  • AbpRoles
    • AbpRoleClaims
  • AbpUsers
    • AbpUserClaims
    • AbpUserLogins
    • AbpUserRoles
    • AbpUserTokens
  • AbpClaimTypes
  • AbpOrganizationUnits
    • AbpOrganizationUnitRoles
    • AbpUserOrganizationUnits
  • AbpSecurityLogs

MongoDB

集合
  • AbpRoles
  • AbpUsers
  • AbpClaimTypes
  • AbpOrganizationUnits
  • AbpSecurityLogs

权限

有关为此模块定义的所有权限,请参见 IdentityPermissions 类成员。

Angular UI

安装

要将应用程序配置为使用身份模块,首先需要从 @volo/abp.ng.identity/config 导入 provideIdentityConfig 到根配置中。然后,您需要将其附加到 appConfig 数组。

// app.config.ts
import { provideIdentityConfig } from '@volo/abp.ng.identity/config';

export const appConfig: ApplicationConfig = {
  providers: [
    // ...
    provideIdentityConfig(),
  ],
};

身份模块应在您的路由配置中导入并懒加载。它有一个用于配置的静态 createRoutes 方法。可用选项如下所列。可以从 @volo/abp.ng.identity 导入。

// app.routes.ts
const APP_ROUTES: Routes = [
  // ...
  {
    path: 'identity',
    loadChildren: () =>
      import('@volo/abp.ng.identity').then(c => c.createRoutes(/* options here */)),
  },
];

如果您通过启动模板生成了项目,则无需执行任何操作,因为它已经添加了这两种配置。

选项

您可以通过将以下选项传递给 createRoutes 静态方法来修改模块页面的外观和行为:

服务/模型

身份模块的服务和模型是通过 ABP CLIgenerate-proxy 命令生成的。如果您需要模块的代理,可以在 Angular 项目目录中运行以下命令:

abp generate-proxy --module identity

可替换组件

eIdentityComponents 枚举提供所有可替换组件的键。可以从 @volo/abp.ng.identity 导入。

有关详细信息,请查看 组件替换文档

远程端点 URL

身份模块的远程端点 URL 可以在环境文件中配置。

export const environment = {
  // 其他配置
  apis: {
    default: {
      url: '默认 URL 在这里',
    },
    AbpIdentity: {
      url: '身份模块远程 URL 在这里'
    }
    // 其他 API 配置
  },
};

上面显示的身份模块远程 URL 配置是可选的。如果您未设置 URL,则将使用 default.url 作为回退。

分布式事件

此模块未定义任何额外的分布式事件。请参见 标准分布式事件

另请参阅

在本文档中