Member 会员管理
FreeKit.Member 是 Identity 之上的会员(C 端用户)运营子模块:在 IdentityUser 之外,叠加会员等级、分组、标签、积分与收货地址等能力。注册/登录仍走完整 Identity,Member 只负责"成为会员之后"的运营数据。
为什么存在(构建在 Identity 之上)
Identity 解决"你是谁、你能做什么",但不关心"你是几级会员、有多少积分、属于哪个分组"。Member 把这类运营维度作为 IdentityUser 的扩展锚点——不重复定义账号,只通过 UserId 关联。因此它必须依赖完整 Identity,不能单独使用;也正因为复用同一身份主体,会员数据与认证/权限天然打通。
一句话:Member 是垫在 Identity 之上的"运营扩展层"——不碰账号与认证,只通过
UserId把会员维度(等级/分组/标签/积分/地址)挂到同一个IdentityUser上。
功能概览
| 功能域 | 能力 |
|---|---|
| 会员管理 | 会员档案、状态(锁定)、指派等级 |
| 等级体系 | 会员等级定义、升降级 |
| 分组标签 | 会员分组、标签、覆盖式关联 |
| 积分系统 | 积分增减、积分日志、积分查询 |
| 用户地址 | 收货地址 CRUD |
数据模型(简述)
Member 不重复定义账号,而是通过 UserId 关联到 Identity 的用户:
MemberUser(FullAuditEntity+ITenant)— 会员主记录,每个用户至多一条。MemberLevel/MemberGroup/MemberTag— 等级 / 分组 / 标签定义。MemberGroupUser(UserId+GroupId)、MemberTagUser(UserId+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);
}
}