# 访客无鉴权策略验证发布包(v20260430) ## 1. 发布目标 本目录为“黄平访问蒙海文”无鉴权策略验证的**版本化发布包**,用于生产执行、结果留痕与归档。 当前对应代码发布版本:`cw-elevator-application-2.0.9` ## 2. 包内文件 - `README.md`:发布说明(本文件) - `操作手册.md`:完整操作步骤与判定规则 - `执行流程设计-简化版.md`:先明确流程再执行的最小闭环方案(推荐先读) - `sql/黄平访客ID手工查询.sql`:生产手工查询黄平访客 ID 的 SQL - `sql/批量样本筛选-多公司多部门.sql`:筛选多个公司/多个部门被访人样本 SQL - `sql/人工核查最终楼层结果.sql`:自定义访客 ID 集合时执行后核验 - `sql/标准批量25访客-执行后核验.sql`:§4.0 单行命令固定 25 名访客号段后的执行后核验 - `python/quick_verify_visitor_floor_policy.py`:执行脚本快照(支持纯 HTTP;可选连组织库/电梯库) - `python/requirements.txt`:`requests` + `pymysql`(预置样本拉取、`--verify-local-db`) - `python/requirements-min.txt`:仅 `requests`(不连库时) - `report/`:脚本输出 JSON 汇总(打包时排除 `*.json` 历史文件) - `打包说明.txt`:生产机 `pip install`、一键 zip、全量预置命令示例 - `MANIFEST.txt`:交付清单 ## 3. 关键基线参数 - 被访人(蒙海文)`personId=964454497399468032` - 访客(黄平)`personId=1102270499947507712` - 租户 `businessId=2524639890ba4f2cba9ba1a4eeaa4015` - 策略语义(与电梯源码一致):未传 **`floorIds`** 且策略启用且 **`allow_zone_ids`** 非空时,生效楼层为 **被访人 `floorList` ∩ `allow_zone_ids`**(求交);无策略或 allow 为空则仍为 **`floorList` 全集**。详见 [`visitor-registration-business-flow.md`](../visitor-registration-business-flow.md)、[`租户组织人员访客-数据模型与用例.md`](../../architecture/租户组织人员访客-数据模型与用例.md)。 ## 4. 测试执行(一行命令) 以下参数已由交付侧与现场环境对齐:**组织** `http://10.0.22.207:8089`,**电梯** `http://10.0.22.207:16112`;**25 名测试访客** `personId` 为连续号段 `9199000100000000001`~`9199000100000000025`(预置脚本内置 25 个被访人样本,本命令**不访问 MySQL**)。 **操作:** 打开解压后的发布包目录(能看到子目录 `python/`),**只粘贴下面整行**,回车执行(自动安装缺失的 `requests` 并跑预置 25 人批量无鉴权探测): ```bash python3 -m pip install -q -r python/requirements-min.txt && python3 python/quick_verify_visitor_floor_policy.py --mode noauth-probe --org-base-url "http://10.0.22.207:8089" --elevator-base-url "http://10.0.22.207:16112" --use-preset-cases --visitor-person-ids "$(python3 -c 'print(",".join(str(9199000100000000000+i) for i in range(1,26)))')" --probe-with-businessid --batch-output-summary "batch-preset-static-$(date +%Y%m%d-%H%M%S).json" ``` 汇总 JSON:`report/` 目录下文件名形如 `batch-preset-static-<时间戳>.json`。 **执行后须查库分析:** 在目标环境 **`cw-elevator-application`** 库运行 `sql/标准批量25访客-执行后核验.sql`,将每名访客的 **`active_row_count`、`zone_id`** 与 JSON 中的 `derived.floor_count`、`derived.floors` 对齐;具体操作与判定要点见 **`操作手册.md` §4.0.1、§4.6**。 --- ### 附录 A:单样本(广发基金基线) ```bash python3 python/quick_verify_visitor_floor_policy.py \ --mode noauth-probe \ --org-base-url "http://10.0.22.207:8089" \ --elevator-base-url "http://10.0.22.207:16112" \ --business-id "2524639890ba4f2cba9ba1a4eeaa4015" \ --meng-person-id "964454497399468032" \ --visitor-person-id "1102270499947507712" \ --probe-with-businessid ``` 该访客为存量人员:库表核验易与历史 `image_rule_ref` 混在一起;若以「本轮新增访客 + 证据」为目标,请以 **§4 一行批量号段 `919900…`** 为主。**操作手册 §4.2** 对上述边界有全文说明。 ### 附录 B:连 MySQL 拉样本 / 库表比对 需与 HTTP 同属一套库的地址与账号由运维另行提供,不由本 README 承载;禁止使用与目标环境不一致的数据库串联验证。 ### 附录 C:`sql/batch_cases.csv` 批量 ```bash python3 python/quick_verify_visitor_floor_policy.py \ --mode noauth-probe \ --org-base-url "http://10.0.22.207:8089" \ --elevator-base-url "http://10.0.22.207:16112" \ --batch-input-csv "sql/batch_cases.csv" \ --visitor-person-ids "1102270499947507712,1102270499947507713,1102270499947507714" \ --visitor-names "黄志平A,黄志平B,黄志平C" \ --probe-with-businessid \ --batch-output-summary "batch-from-csv-$(date +%Y%m%d-%H%M%S).json" ``` ### 附录 D:人员导出 CSV 自动筛选 ```bash python3 python/quick_verify_visitor_floor_policy.py \ --mode noauth-probe \ --org-base-url "http://10.0.22.207:8089" \ --elevator-base-url "http://10.0.22.207:16112" \ --batch-source-person-csv "../_cw_is_person__202604302030.csv" \ --exclude-business-ids "2524639890ba4f2cba9ba1a4eeaa4015" \ --sample-companies 3 \ --sample-persons-per-company 2 \ --visitor-person-ids "1102270499947507712,1102270499947507713,1102270499947507714" \ --visitor-names "黄志平A,黄志平B,黄志平C" \ --probe-with-businessid \ --batch-output-summary "batch-from-export-$(date +%Y%m%d-%H%M%S).json" ``` 说明:导出 CSV 需含列 `BUSINESS_ID`,`ID`,`IS_DEL`,`NAME`(等);无部门列时汇总中 `department` 可能为空。 ## 5. 输出位置 脚本输出(均在发布包下 `report/` 目录): - 单样本:`quick-verify-.json` - 标准批量:见 §4,`batch-preset-static-*.json` - 其他批量:`--batch-output-summary` 指定名;默认 `batch-summary.json`