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 |
|