diff --git a/AGENTS.md b/AGENTS.md index e4bdd42..2dd3c9b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -15,3 +15,7 @@ 用户明确要求 `migrate:fresh` 时:先说明目标库名与数据将全部丢失,待用户确认后再执行。 详见 `.cursor/rules/database-destructive-commands.mdc`。 + +## 后台 RBAC + +改 `app/Support/AdminAuthorizationRegistry.php` 后,在已有库执行 `php artisan lottery:admin-auth-sync --audit`(见 `docs/admin-rbac.md`)。`migrate:fresh --seed` 会走迁移内的 resync,一般不必再手动 sync。 diff --git a/README.md b/README.md index caeb72a..7d79649 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ Boost provides your agent 15+ tools and skills that help agents build Laravel ap 在 **本仓库根目录**(即含 `artisan` 的 `lotterLaravel` 目录)开 **3 个终端**,每段整段复制即可。若已用 Herd / Valet / Sail / 自有 Web 服务器指到 `public`,可不跑「终端 1」。 -**前置(首次)**:`cp .env.example .env`,`composer install`,`php artisan key:generate`,`php artisan migrate`(及你的库表/种子)。 +**前置(首次)**:`cp .env.example .env`,`composer install`,`php artisan key:generate`,`php artisan migrate`(及你的库表/种子)。本地重置演示数据可用 `php artisan migrate:fresh --seed`(会清空当前库)。若只改了 `AdminAuthorizationRegistry` 而未新增迁移,还需 `php artisan lottery:admin-auth-sync --audit`。 **终端 1 — HTTP API** @@ -95,8 +95,7 @@ php artisan schedule:work 后台权限现在提供了一条可直接接入 CI 的体检命令,用来检查: - 受保护后台路由是否都已登记到 `admin_api_resources` -- `permission_required` 资源是否已绑定 `admin_api_resource_bindings` -- `admin_role_menu_actions` 与 `admin_role_api_resources` 是否漂移 +- `permission_required` 资源是否已在 `admin_api_resource_bindings` 绑定 `admin_menu_actions`(鉴权由 `admin_role_menu_actions` + bindings 推导,不再使用已删除的 `admin_role_api_resources` 表) 本地可直接执行: diff --git a/app/Services/Admin/AdminDashboardAnalyticsBuilder.php b/app/Services/Admin/AdminDashboardAnalyticsBuilder.php index a4069ef..1bffdba 100644 --- a/app/Services/Admin/AdminDashboardAnalyticsBuilder.php +++ b/app/Services/Admin/AdminDashboardAnalyticsBuilder.php @@ -70,13 +70,9 @@ final class AdminDashboardAnalyticsBuilder ]; } + /** 与 {@see AdminAuthorizationRegistry} 中 dashboard 类 API 资源的 `dashboard.view` 绑定一致。 */ private function canView(AdminUser $admin): bool { - return $admin->hasAdminPermission('prd.dashboard.view') - || $admin->hasAdminPermission('prd.draw_result.manage') - || $admin->hasAdminPermission('prd.draw_result.view') - || $admin->hasAdminPermission('prd.risk.view') - || $admin->hasAdminPermission('prd.risk.manage') - || $admin->hasAdminPermission('prd.report.view'); + return $admin->hasAdminPermission('prd.dashboard.view'); } } diff --git a/docs/admin-rbac.md b/docs/admin-rbac.md index 559d962..8e8a1d1 100644 --- a/docs/admin-rbac.md +++ b/docs/admin-rbac.md @@ -24,9 +24,16 @@ ```bash php artisan lottery:admin-auth-sync --audit # 同步 API 资源与 bindings,并体检 -php artisan lottery:admin-auth-audit # 仅体检路由覆盖与 binding +php artisan lottery:admin-auth-audit # 仅体检:受保护路由是否登记、permission_required 是否已绑定 ``` +`migrate:fresh --seed` 会跑完全部迁移(含将 Registry 写回库的 resync 类迁移)与 `DatabaseSeeder`;**仅修改** `AdminAuthorizationRegistry.php` 时,在已有库上执行 `lottery:admin-auth-sync --audit`,不要依赖单独补丁 migration。 + +## 仪表盘 API 与子块权限 + +- `GET /api/v1/admin/dashboard` 与 `…/analytics`:中间件要求 `dashboard.view`(对应产品权限 `prd.dashboard.view`)。 +- 进入仪表盘后,财务/期号/风控、钱包异常计数等子块仍按 `AdminDashboardSnapshotBuilder` 内各 `prd.*` 细分(与侧栏其它模块权限一致)。 + ## 已废弃的 `prd.*`(请求体仍可传入,会自动归一) | 旧 slug | 归一为 |