Commit Graph

3 Commits

Author SHA1 Message Date
TanWenyan 32fe0da48a refactor: 移除dify:dataset:manage权限映射
数据库已经删除了统一的dify:dataset:manage权限(id:103),
保留了细分的CRUD权限:
- dify:bind:list (查看)
- dify:bind:create (创建)
- dify:bind:update (更新)
- dify:bind:delete (删除)

修改内容:
1. 从permission-mapper.ts中移除所有权限键映射
2. 现在前端直接显示数据库权限键,不再进行任何转换
3. 权限检查直接使用数据库中的细分权限

优势:
- 更灵活的角色权限配置
- 不同角色可以拥有不同的操作组合
- 符合最小权限原则
2025-12-08 15:47:26 +08:00
TanWenyan d3418ef31b fix: 修复权限映射的反向保存逻辑
问题:权限映射只在显示层面进行,但保存时还需要反向映射回数据库权限键

解决方案:
1. 分离显示权限和原始权限:
   - originalRoutePermissionsMap:存储未映射的原始权限(用于保存)
   - routePermissionsMap:存储映射后的权限(用于显示)
   - originalAllPermissions:存储所有原始权限的列表

2. 加载角色权限时:
   - 从API获取角色已分配的权限ID(原始ID)
   - 直接存储到 selectedPermissionIds
   - 不做任何映射转换

3. 显示权限列表时:
   - 从原始权限构建映射后的权限(合并相同的)
   - 用户看到的就是映射后的权限(如dify:dataset:manage)
   - 但勾选状态基于原始权限ID

4. 保存权限时:
   - 直接使用 selectedPermissionIds(原始ID)
   - 无需反向映射

验证方式:
1. 取消勾选 dify:dataset:manage → 数据库中4个bind权限被DENY → 接口返回403
2. 重新勾选 dify:dataset:manage → 数据库中4个bind权限被GRANT → 接口可访问
2025-12-08 15:39:39 +08:00
TanWenyan 547633bf38 feat: 修复权限键不匹配问题 - 前端权限映射
问题:前端权限列表显示dify:bind:*,但路由实际检查dify:dataset:*和dify:file:*
导致取消勾选后权限控制失效

解决方案:
1. 创建权限映射工具(permission-mapper.ts)
   - dify:bind:list/create/update/delete → dify:dataset:manage
   - 自动将数据库权限键映射为实际生效的权限键

2. 修改角色权限管理页面
   - 加载角色权限时应用权限键映射
   - 渲染权限列表时显示实际生效的权限键
   - 保存权限时使用映射后的权限ID

影响范围:
- 知识库管理权限(/chat-with-llm/dataset-manager)
- 角色权限分配页面(/role-permissions)

验证方式:
取消勾选dify:dataset:manage后,知识库管理接口应返回403
2025-12-08 15:29:31 +08:00