Files
lotteryLaravel/docs/admin-rbac.md
kang e4118d7b1d feat: 更新后台 RBAC 文档与权限检查逻辑
- 在 `AGENTS.md` 中新增后台 RBAC 相关说明,强调 `php artisan lottery:admin-auth-sync --audit` 的使用。
- 更新 `README.md`,明确本地重置演示数据的命令,并补充 `AdminAuthorizationRegistry` 的同步要求。
- 精简 `AdminDashboardAnalyticsBuilder` 中的权限检查逻辑,确保与 `AdminAuthorizationRegistry` 一致。
- 在 `admin-rbac.md` 中添加仪表盘 API 权限要求的详细信息,优化维护命令的描述。
2026-05-26 13:59:28 +08:00

43 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 后台 RBAC 与导航分工
## 单一真相源
| 能力 | 来源 | 说明 |
|------|------|------|
| 侧栏 / `auth/me``navigation` | `App\Support\AdminAuthorizationRegistry::navigationDefinitions()` | **代码注册表**,改菜单需发版 |
| 角色可勾选的产品权限 `prd.*` | 同上 `permissionDefinitions()` | UI 展示名与 `permission_code` 映射 |
| API 鉴权 `permission_code` | 库表 `admin_menu_actions` | 运行时校验 |
| 路由资源 | 库表 `admin_api_resources` + `admin_api_resource_bindings` | 由 `php artisan lottery:admin-auth-sync` 从 Registry 同步 |
## `admin_menus` 不是侧栏配置
-`admin_menus`:仅用于 **`admin_menu_actions` 的业务分组**(权限模块树)。
- **不要**通过改 `admin_menus` 期望侧栏变化;侧栏只看 Registry + 用户拥有的 `prd.*`
## 角色权限如何存储
- **权威数据**`admin_role_menu_actions`(角色 ↔ 动作权限)。
- **`prd.*` 展示**:由 `AdminPermissionBridge::legacySlugsGrantedByMenuActionCodes()` 从已授权动作**反推**,不单独落库。
- 用户直接授权:`admin_user_menu_actions`(可选,与角色权限合并生效)。
## 维护命令
```bash
php artisan lottery:admin-auth-sync --audit # 同步 API 资源与 bindings并体检
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 | 归一为 |
|---------|--------|
| `prd.audit.all` / `prd.audit.self` / `prd.audit.finance` | `prd.audit.view` |
| `prd.report.all` / `prd.report.risk` / `prd.report.finance` / `prd.report.player` | `prd.report.view` |