laravel-chronicle/filament
GitHub: laravel-chronicle/filament
为 Laravel Chronicle 防篡改审计账本提供只读的 Filament 管理面板,支持链级、条目级和片段级的加密验证以及外部锚点可视化。
Stars: 2 | Forks: 0
# Chronicle for Filament
一个用于 [`laravel-chronicle/core`](https://github.com/laravel-chronicle/core) 的**只读** Filament 面板插件:
浏览您的防篡改审计账本并**以加密方式进行验证 - 无论是
整个链、单个条目,还是选定的片段 - 都绝对无法重写
历史**。它是唯一一个在链、条目和片段粒度上提供加密验证的 Filament 审计插件。
该面板无法创建、编辑或删除条目:在 resource 和 Gate 层面已拒绝所有的变更能力,不存在创建/编辑/删除路由,并且 Chronicle 的 `Entry`
模型在数据层是不可变的。在此基础上,UI 提供了深度防御。
## 截图
- 
- 
- 
- 
- 
- 
## 要求
| 要求 | 支持 |
|--------------------------|----------------------------------------|
| PHP | 8.2, 8.3, 8.4, 8.5 |
| Laravel | 12, 13 |
| Filament | 4, 5 |
| `laravel-chronicle/core` | 1.13+ |
| PHP 扩展 | `ext-sodium`, `ext-openssl`(必需) |
## 安装说明
```
composer require laravel-chronicle/filament
php artisan vendor:publish --tag=chronicle-filament-migrations # publish migrations
php artisan migrate # run migrations
```
可选择发布配置文件:
```
php artisan vendor:publish --tag=chronicle-filament-config
```
## 面板注册
在您的 Filament 面板 provider 中注册该插件:
```
use Chronicle\Filament\ChronicleFilamentPlugin;
use Filament\Panel;
public function panel(Panel $panel): Panel
{
return $panel
->plugin(
ChronicleFilamentPlugin::make()
->navigationGroup('Audit')
->navigationSort(99)
->slug('chronicle')
->verification(true)
->anchoring(true) // enable the external-anchor surfaces (defaults to following core)
// Gate the verify actions independently of read access:
->authorize(fn (): bool => auth()->user()?->can('verify-chronicle') ?? false)
// Optional: override actor/subject display labels (falls back to core's resolver):
->labelResolver(fn (string $type, string $id): ?string => null),
);
}
```
读取(查看)权限由您面板的常规授权机制管理;`->authorize()`
闭包仅用于控制链/条目/片段的**验证**操作。
## 配置参考
`config/chronicle-filament.php`:
| 键 | 默认值 | 用途 |
|----------------------------------------|------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `entry_model` | `\Chronicle\Entry\Entry` | resource 读取的 Eloquent 模型。可指向一个子类以添加访问器/关联。当 core >= 1.13 且 `chronicle.models.entry` 匹配时,该覆盖将被 core 的 reader 和验证器端到端执行。 |
| `navigation.group` | `'Chronicle'` | 导航分组标签。 |
| `navigation.sort` | `null` | 导航排序顺序。 |
| `slug` | `'chronicle-entries'` | Resource 路由 slug。 |
| `verification.enabled` | `true` | 徽章、验证操作和健康小组件的总开关。 |
| `verification.queue_threshold` | `1000` | 当链/片段验证涵盖的条目多于此数量时,将被分发到队列中执行,而不是同步运行。 |
| `verification.store.connection` | `null` | 用于插件专属验证结果存储的数据库连接。`null` = 应用程序的默认连接。 |
| `anchoring.enabled` | `null` | 锚点界面(详情部分、验证锚点、锚点列/过滤器、覆盖率小组件)的总开关。`null` 会遵循 core 的 `chronicle.anchoring.enabled` 设置;设为 `true`/`false` 则强制生效。当 core 的锚点功能关闭时,所有界面均会隐藏。 |
| `anchoring.verify_all_queue_threshold` | `1000` | “验证所有锚点”操作在范围内的 checkpoint 数量小于等于此值时同步运行,大于此值时则分发到队列中执行。 |
流利的插件方法(`navigationGroup`、`navigationSort`、`slug`、`cluster`、
`verification`、`anchoring`、`authorize`、`labelResolver`)会按面板覆盖匹配的配置值。
## 验证
验证始终是**刻意触发**的 - 在读取或渲染路径上不会执行任何验证。您可以在
面板中执行以下操作:
- **验证链**(页头操作)- 从创世块开始的整个账本。
- **验证条目**(行操作)- 单个条目。
- **验证片段**(批量操作)- 选定的跨度,通过 core 的 `verifyEntryRange` 以封闭的已签名
checkpoint 作为锚点(绝不基于选定行的存储 hash)。
结果将写入一个插件专属的、基于数据库的存储中,并以状态徽章
(`Verified` / `Failed` / `Unverified` / `Stale`)和健康小组件的形式展示。涵盖条目数超过
`verification.queue_threshold` 的验证操作将在队列中运行,并在完成时通知您。
## 外部锚定
当 `laravel-chronicle/core` 被配置为将其已签名的 checkpoint 锚定到
外部服务时 - 例如 RFC 3161 时间戳权威机构,或者
[`laravel-chronicle/anchor-s3`](https://github.com/laravel-chronicle/anchor-s3) adapter -
该面板会以**只读**方式展示该锚定:
- **详情视图** - 条目详情的“外部锚定”部分从仅存储的状态中列出了该条目对应的
checkpoint 的锚点(provider、状态徽章、`anchored_at`、引用,以及一个可复制、
截断的 proof)。
- **验证锚点** - 一个刻意触发的行/页头操作,针对条目的 checkpoint 运行 core 的
`AnchorVerifier::checkpointHasValidAnchor()` 并记录
结果。绝不在渲染时运行。
- **验证所有锚点** - 一个刻意触发的列表页页头操作,对范围内的 checkpoints 运行
`AnchorVerifier::verify()`,当低于
`anchoring.verify_all_queue_threshold` 时同步执行,高于该值时在
队列中执行(并在完成时通知您)。
- **锚点列 + 过滤器** - 一个“锚点”徽章列和一个从
存储的锚点状态派生的状态过滤器。
- **覆盖率小组件** - 一个统计小组件,通过低开销的表聚合数据总结已锚定与总 checkpoint 数量、待处理
和失败计数,以及最新的锚定时间。
所有这些都是**刻意且只读的** - 绝不会写入任何锚点,并且在读取或渲染路径上不会运行任何 provider
验证。
锚定**要求配置 core 的锚定功能**并生成 `anchored` 行。使用
`->anchoring(true)`(或配置中的 `anchoring.enabled`)启用相关界面;默认情况下它们
遵循 core 的 `chronicle.anchoring.enabled`,并在其关闭时保持隐藏,将条目
显示为 `Unanchored`。
## 主题
该面板仅使用 Filament 原生的 CSS 变量和工具类 - 不依赖 npm,不需要编译 asset,
也不需要自定义主题。它会自动采用您面板的主色调和暗黑模式
设置。
## License
The MIT License (MIT)。请参阅 [LICENSE](LICENSE)。
标签:ffuf, Filament插件, Laravel, Syscall, Web开发, Zenmap, 安全测试工具, 审计日志, 数据完整性, 防篡改