权限、菜单和白名单

本文整理 DGJ2.0 后台菜单、资源权限、服务站白名单和 OPS 菜单控制。新增页面、按钮、接口或限制服务站能力时,先看这里。

业务目标

  • 知道菜单、资源、数据权限和白名单分别落在哪些表。
  • 知道新增功能时需要补哪些配置。
  • 排查“用户看不到菜单”“按钮没权限”“某服务站功能不可用”的问题。

入口文件

  • OPS 白名单:application/controllers/inner/sys/OpsWhitelist.php
  • 菜单规则服务:application/Services/MenuRule/MenuRuleSer.php
  • 系统/用户相关控制器:application/controllers/inner/User.phpAccess.phpManage.php
  • 后台菜单相关表常量:application/config/tables.php
  • Redis key:application/KzData/Enums/RedisKeys.php

核心表

| 表 | 用途 | | --- | --- | | t_acl_sys_resource | 系统资源 | | t_acl_sys_resource_rule | 资源权限规则 | | t_sys_admin | 系统用户 | | t_sys_menu | 功能菜单权限 | | t_sys_menu_data | 数据权限 | | t_sys_menu_config | 菜单配置 | | t_sys_ops_menu_rule | OPS 控制店管家菜单规则 | | t_sys_ops_menu_rule_new | OPS 控制新店管家菜单规则 | | t_sys_ops_whitelist | 服务站白名单 | | t_admin_special_authority_control | 特殊权限控制 |

主流程

  1. 页面/按钮是否显示,先看菜单和资源配置。
  2. 接口是否允许访问,继续看控制器鉴权、资源规则和登录态。
  3. 服务站是否有功能能力,看 OPS 白名单、菜单规则、服务站版本、特殊权限。
  4. 如果是采购/销售能力黑名单,查 MenuRuleSer.php 中 Redis 黑名单逻辑。

常见排查

| 现象 | 检查顺序 | | --- | --- | | 用户没有菜单 | t_sys_menu、角色/资源关系、用户角色 | | 有菜单但按钮不可点 | 按钮资源、t_acl_sys_resource_rule、前端权限码 | | 接口提示无权限 | 登录态、控制器鉴权、资源规则、token | | 某服务站看不到新功能 | t_sys_ops_whitelist、服务站版本、OPS 菜单规则 | | 采购/销售入口被锁 | MenuRuleSer.php、Redis 黑名单、OPS 规则 |

常用 rg 命令

rg -n "OpsWhitelist|SYS_OPS_WHITELIST|SYS_MENU_CONFIG|SYS_OPS_MENU_RULE" application
rg -n "HASH_PURCHASE_STATION_BLACKLIST|HASH_SALE_STATION_BLACKLIST|MenuRuleSer" application
rg -n "ACL_SYS_RESOURCE|ACL_SYS_RESOURCE_RULE|SYS_MENU_DATA" application/config application/controllers application/Services

改动风险和回归清单

  • 新增菜单:回归管理员、普通用户、有/无角色用户。
  • 新增按钮权限:回归页面显示和接口真实鉴权。
  • 新增服务站白名单:回归白名单内、白名单外、黑名单服务站。
  • 修改菜单规则缓存:回归 Redis 刷新和旧缓存失效。