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 提供了深度防御。 ## 截图 - ![带有验证徽章的条目列表](https://raw.githubusercontent.com/laravel-chronicle/filament/main/docs/screenshots/list.png) - ![条目详情(infolist)](https://raw.githubusercontent.com/laravel-chronicle/filament/main/docs/screenshots/view.png) - ![验证操作:链、条目、片段](https://raw.githubusercontent.com/laravel-chronicle/filament/main/docs/screenshots/verify.png) - ![验证健康小组件](https://raw.githubusercontent.com/laravel-chronicle/filament/main/docs/screenshots/widget.png) - ![锚点详情 + 覆盖率小组件](https://raw.githubusercontent.com/laravel-chronicle/filament/main/docs/screenshots/anchoring.png) - ![锚点列和验证锚点操作](https://raw.githubusercontent.com/laravel-chronicle/filament/main/docs/screenshots/anchor-verify.png) ## 要求 | 要求 | 支持 | |--------------------------|----------------------------------------| | 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, 安全测试工具, 审计日志, 数据完整性, 防篡改