--- icon: mdi:video-outline date: 2026-03-05 category: - 工作 - 项目总结 tag: - 权限配置 - 录像回放 title: 录像回放权限配置说明 --- 录像回放权限配置说明 # 录像回放权限配置说明 ## 概述 根据系统权限说明文档中的权限隔离原则,为录像回放相关功能设置了单独的权限位(权限位21:RECORD_PLAYBACK),实现与实时监控权限的独立控制。 ## 修改内容 ### 1. 权限常量定义 **文件**: `platapp/04_sunri-web-patrol/sunri-web-center-utils/src/main/java/com/sunri/constant/RightConstant.java` **修改内容**: 添加录像回放权限常量 ```java // 录像回放: 操作员,对应实时监控->录像回放相关界面的浏览、查询权限 public static final int RECORD_PLAYBACK = 21; ``` 同时更新了操作员权限注释,增加 `RECORD_PLAYBACK` 权限位。 ### 2. Controller API权限注解更新 #### 2.1 HighDefinitionVideoEquipmentController.java **文件**: `platapp/04_sunri-web-patrol/sunri-web-center-cygbusiness/cygbusiness-model/src/main/java/com/sunri/model/controller/account/HighDefinitionVideoEquipmentController.java` **修改的API方法**: - `getVideoFileList` - 录像-获取文件列表 - `getVideoFileUrl` - 录像-获取回放地址 - `stopVideoFileUrl` - 录像-停止回放/推流 - `videoPlayBackControl` - 录像-回放控制 - `videoProgress` - 录像-进度获取 - `getAfterCalibrationStartTime` - 录像-获取校准后开始时间 **权限变更**: 从 `@ApiRight(value = {REAL_TIME_MONITORING})` 改为 `@ApiRight(value = {RECORD_PLAYBACK})` #### 2.2 ResourceController.java **文件**: `platapp/04_sunri-web-patrol/sunri-web-center-standalone/standalone-patrol/src/main/java/com/sunri/controller/ResourceController.java` **修改的API方法**: - `downloadVideoChunk` - 下载文件到浏览器(分片) - `getDownloadChunkSize` - 获取下载文件分片数 **权限变更**: 从 `@ApiRight(value = {REAL_TIME_MONITORING, ALGORITHM_VERIFICATION})` 改为 `@ApiRight(value = {REAL_TIME_MONITORING, RECORD_PLAYBACK, ALGORITHM_VERIFICATION})` #### 2.3 HighDefinitionVideoMonitorController.java **文件**: `platapp/04_sunri-web-patrol/sunri-web-center-cygbusiness/cygbusiness-model/src/main/java/com/sunri/model/controller/monitor/HighDefinitionVideoMonitorController.java` **修改的API方法**: - `videoDownload` - 录像-开始下载/手动录像 **权限变更**: 从 `@ApiRight(value = {DEVICE_CONTROL})` 改为 `@ApiRight(value = {RECORD_PLAYBACK})` ### 3. 数据库配置脚本 ```sql -- 录像回放权限配置脚本 -- 功能:为录像回放相关功能添加权限位21(RECORD_PLAYBACK)的单独控制 -- 1. 添加录像回放权限常量到 cfg_auth_const 表 INSERT INTO cfg_auth_const (right, description, create_time, update_time) VALUES (21, '录像回放', NOW(), NOW()) ON DUPLICATE KEY UPDATE description = '录像回放', update_time = NOW(); -- 2. 查找录像回放相关的菜单ID -- SELECT id, name, nodeid, url FROM cfg_menu WHERE name LIKE '%录像%' OR name LIKE '%回放%'; -- 3. 为录像回放菜单绑定权限位21(按实际菜单修改) -- INSERT INTO cfg_resource_right (resource_id, right) -- VALUES (7, 21) -- ON DUPLICATE KEY UPDATE right = 21; -- INSERT INTO cfg_resource_right (resource_id, right) -- SELECT id, 21 FROM cfg_menu WHERE nodeid = 'LXHF' -- ON DUPLICATE KEY UPDATE right = 21; -- 4. 更新角色权限配置(示例) -- UPDATE user_role_info SET role_authority = role_authority | 2097152 WHERE role_name = '操作员'; -- UPDATE user_role_info SET role_authority = role_authority | 2097216 WHERE role_name = '监控操作员'; -- UPDATE user_role_info SET role_authority = role_authority | 2097152 WHERE role_name = '录像查询员'; -- 5. 验证配置 -- SELECT * FROM cfg_auth_const WHERE right = 21; -- SELECT mr.*, m.name, m.nodeid FROM cfg_resource_right mr JOIN cfg_menu m ON mr.resource_id = m.id WHERE mr.right = 21; -- SELECT role_id, role_name, role_authority, (role_authority & 2097152) > 0 AS has_record_playback_permission FROM user_role_info; -- 回滚SQL -- DELETE FROM cfg_auth_const WHERE right = 21; -- DELETE FROM cfg_resource_right WHERE right = 21; -- UPDATE user_role_info SET role_authority = role_authority & ~2097152 WHERE role_authority & 2097152 > 0; ``` ## 权限隔离优势 通过将录像回放权限从实时监控权限中独立出来,实现了以下优势: | 场景 | 实时监控权限(6) | 录像回放权限(21) | 说明 | |------|----------------|------------------|------| | 实时监控员 | ✅ | ❌ | 只能查看实时监控画面 | | 录像查询员 | ❌ | ✅ | 只能查看历史录像回放 | | 监控操作员 | ✅ | ✅ | 既能看实时监控也能看录像回放 | | 数据分析员 | ❌ | ✅ | 只能进行录像数据分析 | ## 实施步骤 ### 代码修改(已完成) 1. ✅ 在 `RightConstant.java` 中添加 `RECORD_PLAYBACK = 21` 常量 2. ✅ 更新录像回放相关API的权限注解 3. ✅ 创建数据库配置脚本 ### 数据库配置(需要手动执行) 1. 备份数据库 2. 执行上文中的 SQL 配置脚本 3. 根据实际菜单数据,确认录像回放菜单的ID或nodeid 4. 更新角色权限配置 5. 验证配置是否正确 ### 系统部署 1. 编译代码 2. 部署应用 3. 执行数据库配置脚本 4. 相关用户重新登录以获取新权限 ## 权限位计算 - **权限位21的值**: 2^21 = 2,097,152 - **实时监控权限位6的值**: 2^6 = 64 - **同时拥有实时监控和录像回放权限**: 64 + 2,097,152 = 2,097,216 ### 角色权限配置示例 ```sql -- 操作员:增加录像回放权限 UPDATE user_role_info SET role_authority = role_authority | 2097152 WHERE role_name = '操作员'; -- 监控操作员:拥有实时监控和录像回放权限 UPDATE user_role_info SET role_authority = role_authority | 2097216 WHERE role_name = '监控操作员'; -- 录像查询员:只拥有录像回放权限 UPDATE user_role_info SET role_authority = role_authority | 2097152 WHERE role_name = '录像查询员'; ``` ## 注意事项 1. **数据库备份**: 执行数据库脚本前,请务必备份数据库 2. **菜单确认**: 脚本中的菜单ID需要根据实际情况进行确认和修改 3. **角色权限**: 角色权限配置需要根据实际业务需求进行调整 4. **用户登录**: 修改角色权限后,相关用户需要重新登录才能生效 5. **权限测试**: 部署后请进行全面的权限测试,确保权限控制正确 ## 回滚方案 如需回滚,请执行以下操作: 1. 恢复代码版本 2. 执行上文中的回滚 SQL 脚本 3. 重新部署应用 4. 相关用户重新登录 ## 验证方法 ### 代码验证 ```bash # 搜索所有使用RECORD_PLAYBACK权限的API grep -r "RECORD_PLAYBACK" --include="*.java" platapp/ ``` ### 数据库验证 ```sql -- 查看权限常量 SELECT * FROM cfg_auth_const WHERE right = 21; -- 查看菜单权限绑定 SELECT mr.*, m.name, m.nodeid FROM cfg_resource_right mr JOIN cfg_menu m ON mr.resource_id = m.id WHERE mr.right = 21; -- 查看角色权限 SELECT role_id, role_name, role_authority, (role_authority & 2097152) > 0 AS has_record_playback_permission FROM user_role_info; ``` ### 功能验证 1. 创建只拥有录像回放权限的用户角色 2. 使用该角色登录系统 3. 验证只能访问录像回放功能,不能访问实时监控功能 4. 创建只拥有实时监控权限的用户角色 5. 使用该角色登录系统 6. 验证只能访问实时监控功能,不能访问录像回放功能 ## 相关文档 - 权限管理系统文档.md: 完整的权限管理说明文档 ## 版本信息 - **修改日期**: 2026-03-05 - **修改人员**: 系统管理员 - **版本**: 1.0.0 - **状态**: 已完成代码修改和数据库配置