feat: 更新后台 RBAC 文档与权限检查逻辑

- 在 `AGENTS.md` 中新增后台 RBAC 相关说明,强调 `php artisan lottery:admin-auth-sync --audit` 的使用。
- 更新 `README.md`,明确本地重置演示数据的命令,并补充 `AdminAuthorizationRegistry` 的同步要求。
- 精简 `AdminDashboardAnalyticsBuilder` 中的权限检查逻辑,确保与 `AdminAuthorizationRegistry` 一致。
- 在 `admin-rbac.md` 中添加仪表盘 API 权限要求的详细信息,优化维护命令的描述。
This commit is contained in:
2026-05-26 13:59:28 +08:00
parent 3c74ffc2d5
commit e4118d7b1d
4 changed files with 16 additions and 10 deletions

View File

@@ -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。

View File

@@ -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` 表)
本地可直接执行:

View File

@@ -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');
}
}

View File

@@ -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 | 归一为 |