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:
@@ -15,3 +15,7 @@
|
|||||||
用户明确要求 `migrate:fresh` 时:先说明目标库名与数据将全部丢失,待用户确认后再执行。
|
用户明确要求 `migrate:fresh` 时:先说明目标库名与数据将全部丢失,待用户确认后再执行。
|
||||||
|
|
||||||
详见 `.cursor/rules/database-destructive-commands.mdc`。
|
详见 `.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。
|
||||||
|
|||||||
@@ -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」。
|
在 **本仓库根目录**(即含 `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**
|
**终端 1 — HTTP API**
|
||||||
|
|
||||||
@@ -95,8 +95,7 @@ php artisan schedule:work
|
|||||||
后台权限现在提供了一条可直接接入 CI 的体检命令,用来检查:
|
后台权限现在提供了一条可直接接入 CI 的体检命令,用来检查:
|
||||||
|
|
||||||
- 受保护后台路由是否都已登记到 `admin_api_resources`
|
- 受保护后台路由是否都已登记到 `admin_api_resources`
|
||||||
- `permission_required` 资源是否已绑定 `admin_api_resource_bindings`
|
- `permission_required` 资源是否已在 `admin_api_resource_bindings` 绑定 `admin_menu_actions`(鉴权由 `admin_role_menu_actions` + bindings 推导,不再使用已删除的 `admin_role_api_resources` 表)
|
||||||
- `admin_role_menu_actions` 与 `admin_role_api_resources` 是否漂移
|
|
||||||
|
|
||||||
本地可直接执行:
|
本地可直接执行:
|
||||||
|
|
||||||
|
|||||||
@@ -70,13 +70,9 @@ final class AdminDashboardAnalyticsBuilder
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 与 {@see AdminAuthorizationRegistry} 中 dashboard 类 API 资源的 `dashboard.view` 绑定一致。 */
|
||||||
private function canView(AdminUser $admin): bool
|
private function canView(AdminUser $admin): bool
|
||||||
{
|
{
|
||||||
return $admin->hasAdminPermission('prd.dashboard.view')
|
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');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,9 +24,16 @@
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
php artisan lottery:admin-auth-sync --audit # 同步 API 资源与 bindings,并体检
|
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.*`(请求体仍可传入,会自动归一)
|
## 已废弃的 `prd.*`(请求体仍可传入,会自动归一)
|
||||||
|
|
||||||
| 旧 slug | 归一为 |
|
| 旧 slug | 归一为 |
|
||||||
|
|||||||
Reference in New Issue
Block a user