-- ============================================================================= -- IT-3 权限点与页面菜单种子(可重放)。执行顺序:14 补列 → 15 设备种子 → 本文件。 -- 依据:公寓端/10 表 10-24(权限与安全)、表 10-26(N-25~N-37 接口)、 -- 04 §0 接口增量表、13 表 13-13 验收①、CR-02 §12(CR-C25 / 验收 15)。 -- 口径: -- 1) 只新增 IT-3 需要的权限点与 1 个页面菜单,不改 3000 目录、不改 IT-1/IT-2 既有 F 点。 -- 2) N-34 / N-38(`/open/v1/**`)为设备侧匿名分区,无权限点字符串, -- 靠「设备编码 + HMAC + 时间窗 + nonce」四要素鉴权,不在此登记。 -- 3) 签到终端只有「发起申请」权(N-34);确认 / 驳回必须 `duty:person:reg` + 二次确认(N-36/N-37)。 -- 4) 设备下发 / 可见范围 / 类别标注 / 三级对账属 IT-7(N-26/N-27/N-29), -- 表 10-24 #1 要求登记 `apt:face:category`,本期只登记权限点并置灰, -- 与 IT-2 的 3014 `apt:room:add` 置灰策略一致,避免「页面有按钮、后端恒 40940」的假交互。 -- ============================================================================= -- 1. F 权限点(parent 3000) INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES (3211, '人脸人员查看', 3000, 11, '', '', '', '', 1, 0, 'F', '0', '0', 'apt:face:list', '#', 'IT-3', NOW(), 'IT-3 N-25 人脸人员 / N-35 注册台账查看;只读,不接受客户端 gyid'), (3212, '人脸注册审核', 3000, 12, '', '', '', '', 1, 0, 'F', '0', '0', 'duty:person:reg', '#', 'IT-3', NOW(), 'IT-3 N-35/N-36/N-37 值班台;确认=注册生效点,须二次确认;签到终端只有申请权'), (3213, '人脸下发', 3000, 13, '', '', '', '', 1, 0, 'F', '1', '1', 'apt:face:dispatch', '#', 'IT-3', NOW(), 'N-26 设备下发指令;IT-7 才开放,本期置灰不授予角色'), (3214, '人脸可见范围', 3000, 14, '', '', '', '', 1, 0, 'F', '1', '1', 'apt:face:scope', '#', 'IT-3', NOW(), 'N-27 设备人脸可见范围;IT-7 才开放,本期置灰不授予角色'), (3215, '人脸对账', 3000, 15, '', '', '', '', 1, 0, 'F', '1', '1', 'apt:face:reconcile', '#', 'IT-3', NOW(), 'N-29 三级版本 / hash 对账;IT-7 才开放,本期置灰不授予角色'), (3216, '人脸类别标注', 3000, 16, '', '', '', '', 1, 0, 'F', '1', '1', 'apt:face:category', '#', 'IT-3', NOW(), '表 10-24 #7 人员类别标注仅公寓管理员可改;类别变更联动 FACE_ERASE 属 IT-7,本期置灰不授予角色') ON DUPLICATE KEY UPDATE menu_name = VALUES(menu_name), parent_id = VALUES(parent_id), order_num = VALUES(order_num), menu_type = VALUES(menu_type), visible = VALUES(visible), status = VALUES(status), perms = VALUES(perms), remark = VALUES(remark); -- 2. C 页面菜单(父目录 3000,完整路由 /apt/face) INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, query, route_name, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES (3201, '人脸注册审核', 3000, 5, 'face', 'apt/face/reg/index', '', '', 1, 0, 'C', '0', '0', '', 'peoples', 'IT-3', NOW(), 'IT-3 人脸注册申请台账:regState 切换待审/已确认/已驳回;N-36 确认、N-37 驳回;双路同步状态只读') ON DUPLICATE KEY UPDATE menu_name = VALUES(menu_name), parent_id = VALUES(parent_id), order_num = VALUES(order_num), path = VALUES(path), component = VALUES(component), menu_type = VALUES(menu_type), visible = VALUES(visible), status = VALUES(status), icon = VALUES(icon), remark = VALUES(remark); -- 3. 超管关联(仅可用项;置灰项 3213~3216 不关联) INSERT INTO sys_role_menu (role_id, menu_id) SELECT 1, m.menu_id FROM sys_menu m WHERE m.menu_id IN (3201, 3211, 3212) AND NOT EXISTS (SELECT 1 FROM sys_role_menu rm WHERE rm.role_id = 1 AND rm.menu_id = m.menu_id); -- 4. 校验 SELECT '=== IT-3 权限点与页面菜单(应 7 行:6 F + 1 C)===' AS section; SELECT menu_id, menu_name, menu_type, visible, status, perms, component FROM sys_menu WHERE menu_id BETWEEN 3201 AND 3216 ORDER BY menu_id; SELECT '=== C 菜单组件路径(须与 src/views/apt/face/reg/index.vue 一致)===' AS section; SELECT menu_id, CONCAT('src/views/', component, '.vue') AS vue_file FROM sys_menu WHERE menu_id = 3201; SELECT '=== 超管关联可用项(应 3)===' AS section; SELECT COUNT(*) AS admin_bound FROM sys_role_menu rm JOIN sys_menu m ON m.menu_id = rm.menu_id WHERE rm.role_id = 1 AND m.menu_id IN (3201, 3211, 3212); SELECT '=== 置灰项是否仍未关联角色(3213~3216 应为 0)===' AS section; SELECT COUNT(*) AS grey_bound FROM sys_role_menu rm JOIN sys_menu m ON m.menu_id = rm.menu_id WHERE m.menu_id IN (3213, 3214, 3215, 3216); SELECT '=== 公寓端菜单树构成(应 M=1 / C=5 / F=21)===' AS section; SELECT menu_type, COUNT(*) AS cnt FROM sys_menu WHERE menu_id = 3000 OR parent_id = 3000 GROUP BY menu_type ORDER BY menu_type; SELECT '=== M0 验收账号仍无公寓端权限点(应为 0)===' AS section; SELECT COUNT(*) AS apt_permission_count FROM sys_role_menu rm JOIN sys_menu m ON m.menu_id = rm.menu_id WHERE rm.role_id = 300 AND (m.perms LIKE 'apt:%' OR m.perms LIKE 'duty:%' OR m.perms = '*:*:*');