- 在多个控制器中将权限检查从 hasAdminPermission 更新为 hasPermissionCode,以增强权限管理的灵活性。 - 引入 AdminScopePolicy,优化基于代理节点的权限和数据过滤逻辑,确保管理员能够更精确地控制访问权限。 - 在请求验证中添加 agent_node_id 字段,确保 API 接口支持代理节点的相关操作。 - 更新 AdminUser 模型,新增 hasPermissionCode 方法,以支持更细粒度的权限检查。 - 优化审计日志记录逻辑,确保在处理请求时能够准确记录管理员的操作。
49 lines
2.6 KiB
Markdown
49 lines
2.6 KiB
Markdown
# 后台 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`)。
|
||
- 子块权限判定统一按 `permission_code`(如 `draw.results.view`、`risk.monitor.view`、`service.reconcile.view`),`prd.*` 仅作为展示映射。
|
||
|
||
## 站点优先作用域约束(2026-06)
|
||
|
||
- 后台查询范围统一为:`site_scope ∩ agent_subtree_scope`。
|
||
- 新增统一入口 `App\Support\AdminScopePolicy`,查询应优先通过该策略应用数据范围。
|
||
- `auth/me` 继续返回 `permissions`(`prd.*`)兼容前端,同时新增 `operational_permissions` 字段用于显式表达可操作权限集合。
|
||
|
||
## 已废弃的 `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` |
|