跳到主要内容

Member 会员管理

FreeKit.Member 是 Identity 之上的会员(C 端用户)运营子模块:在 IdentityUser 之外,叠加会员等级、分组、标签、积分与收货地址等能力。注册/登录仍走完整 Identity,Member 只负责"成为会员之后"的运营数据。

为什么存在(构建在 Identity 之上)

Identity 解决"你是谁、你能做什么",但不关心"你是几级会员、有多少积分、属于哪个分组"。Member 把这类运营维度作为 IdentityUser 的扩展锚点——不重复定义账号,只通过 UserId 关联。因此它必须依赖完整 Identity,不能单独使用;也正因为复用同一身份主体,会员数据与认证/权限天然打通。

一句话:Member 是垫在 Identity 之上的"运营扩展层"——不碰账号与认证,只通过 UserId 把会员维度(等级/分组/标签/积分/地址)挂到同一个 IdentityUser 上。

功能概览

功能域能力
会员管理会员档案、状态(锁定)、指派等级
等级体系会员等级定义、升降级
分组标签会员分组、标签、覆盖式关联
积分系统积分增减、积分日志、积分查询
用户地址收货地址 CRUD

数据模型(简述)

Member 不重复定义账号,而是通过 UserId 关联到 Identity 的用户:

  • MemberUserFullAuditEntity + ITenant)— 会员主记录,每个用户至多一条。
  • MemberLevel / MemberGroup / MemberTag — 等级 / 分组 / 标签定义。
  • MemberGroupUserUserId + GroupId)、MemberTagUserUserId + TagId)— 多对多关联。
  • UserIntegral / UserIntegralLog — 积分余额与变动日志。
  • UserAddress — 收货地址。

快速开始

1. 注册服务

// Program.cs(Member 依赖完整 Identity,需先接入 Identity)
builder.Services.AddMember();

2. 配置

{
"ConnectionStrings": {
"DefaultDB": "0"
}
}

3. 启动

dotnet run --project src/Services/Host/FreeKit.Host

使用场景

会员等级

等级是会员的"档位"定义,通过 IMemberLevelService 管理;把某会员指派到某等级走 IMemberService.AssignLevelAsync

public class MemberService
{
private readonly IMemberLevelRepository _levelRepo;

public async Task<MemberLevelDto> GetLevelAsync(Guid levelId)
=> await _levelRepo.FindAsync(levelId);
}

积分管理

积分是对会员的"虚拟资产"记账,任何增减都写 UserIntegralLog 留痕,便于对账与风控。

public class IntegralService
{
private readonly IUserIntegralRepository _integralRepo;

public async Task AddIntegralAsync(Guid userId, int amount, string description)
{
var integral = new UserIntegral
{
UserId = userId,
Amount = amount,
Description = description,
CreateTime = DateTime.UtcNow
};
await _integralRepo.InsertAsync(integral);
}
}

相关文档