# 会员插件 — 功能清单

## 状态
- 对应 SPEC：`docs/specs/membership/SPEC.md`
- 最近更新：2026-08-12 03:55

## 完成项

### payment 核心配套
- [x] `entitlements.expires_at` 迁移
- [x] `hasEntitlement` / `markPaid.ownedElsewhere` / `scopeActive`/`isActive` 统一未过期语义
- [x] `hasActiveAny(userId, productType)`
- [x] `resolveCheckoutProduct`：membership 服务端取价；未知类型 422（去掉 query 兜底）

### 核心扩展
- [x] `filament.article.validate_access_restrictions` 挂载（Create/Edit）
- [x] `MembershipPluginPage` 导航恒隐藏
- [x] paid-content：互斥改到 validate 点；mutate 不再抢先 unset

### membership 插件
- [x] plugin.json `requires` + docs README
- [x] migrations：`membership_plans`、`article_membership`
- [x] models + PlanSeeder（月度/终身）
- [x] Filament PlanResource
- [x] `order.paid` 写 expires_at（fail-closed）
- [x] 前台套餐页 + status JSON + 资料页状态
- [x] 文章表单会员闸 + article.access + 互斥
- [x] 删除 plan 守卫（引用/权益）

### 文档与测试
- [x] docs/plugins.md
- [x] PHPUnit Membership + PaidContent 回归（50 passed）

## 变更记录
| 时间 | 原因 | 变更 |
|------|------|------|
| 2026-08-12 03:45 | SPEC 用户确认定稿 | 创建功能清单 |
| 2026-08-12 03:55 | 实现完成 | 勾选全部完成项 |
