Skip to content

fix: honor project-range op permissions in UserCanOpDB - #660

Open
LordofAvernus wants to merge 1 commit into
mainfrom
dms-fix-953
Open

fix: honor project-range op permissions in UserCanOpDB#660
LordofAvernus wants to merge 1 commit into
mainfrom
dms-fix-953

Conversation

@LordofAvernus

@LordofAvernus LordofAvernus commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

User description

关联的 issue

https://github.com/actiontech/dms-ee/issues/953

描述你的变更

  • UserCanOpDB / GetCanOpDBUsersOpRangeType=project 为项目全量数据源命中
  • ListUsersOpPermissionInProject 合并成员项目权限槽;允许纯 project 范围角色挂载
  • 导出全局 pending_for_me OR 关联 pending 原文指派

确认项(pr提交后操作)

Tip

请在指定复审人之前,确认并完成以下事项,完成后✅


  • 我已完成自测
  • 我已记录完整日志方便进行诊断
  • 我已在关联的issue里补充了实现方案
  • 我已在关联的issue里补充了测试影响面
  • 我已确认了变更的兼容性,如果不兼容则在issue里标记 not_compatible
  • 我已确认了是否要更新文档,如果要更新则在issue里标记 need_update_doc

Made with Cursor


Description

  • 更新成员角色权限校验逻辑

  • 强化项目范围权限处理

  • 扩展SQL查询合并项目权限槽

  • 添加新单元测试覆盖项目范围权限场景


File Walkthrough

Relevant files
Bug fix
member.go
更新成员权限校验逻辑                                                                                             

internal/dms/biz/member.go

  • 新增project范围角色校验逻辑
  • 修改Global权限返回错误描述
+7/-3     
Enhancement
op_permission_verify.go
改进DB权限判断逻辑                                                                                             

internal/dms/biz/op_permission_verify.go

  • 重构权限判断逻辑为switch语句
  • 增加project范围权限全量命中处理
+15/-2   
op_permission_verify.go
优化项目权限SQL查询                                                                                           

internal/dms/storage/op_permission_verify.go

  • 更新SQL查询逻辑合并项目权限槽
  • 添加额外UNION查询支持project范围权限
+15/-1   
workflow.go
优化工作流过滤SQL逻辑                                                                                         

internal/dms/storage/workflow.go

  • 增加UNMASKING_WORKFLOW表过滤逻辑
  • 扩展JSON字段匹配及EXISTS判断
+12/-1   
Tests
op_permission_verify_test.go
扩展权限测试用例覆盖                                                                                             

internal/dms/biz/op_permission_verify_test.go

  • 增加测试参数needPermUID字段
  • 新增项目范围权限单元测试用例
+125/-1 

Treat OpRangeType=project as full project DB hit, merge member project
permission slots, and include pending unmasking assignees in export pending_for_me.
@github-actions

Copy link
Copy Markdown

PR Reviewer Guide 🔍

⏱️ Estimated effort to review: 3 🔵🔵🔵⚪⚪
🧪 PR contains tests
🔒 No security concerns identified
⚡ No major issues detected

@github-actions

Copy link
Copy Markdown

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
General
优化联合查询逻辑

建议仔细检查 SQL 查询中的参数顺序和 UNION 子句,确保所有查询的参数顺序和条件匹配;同时可以重构或分割复杂的 SQL 语句以提高可读性和维护性。
确认各个
UNION 分支的逻辑是一致的,避免可能的运行时错误。

internal/dms/storage/op_permission_verify.go [447-470]

 SELECT 
   m.user_uid, p.op_permission_uid, r.op_range_type, r.range_uids 
 FROM members AS m 
 JOIN role_op_permissions AS p ON r.role_uid = p.role_uid
 UNION 
 SELECT
   DISTINCT mgu.user_uid, rop.op_permission_uid, mgror.op_range_type, mgror.range_uids 
 FROM member_groups mg
 JOIN member_group_users mgu ON mg.uid = mgu.member_group_uid
 JOIN member_group_role_op_ranges mgror ON mgu.member_group_uid = mgror.member_group_uid
 JOIN role_op_permissions rop ON mgror.role_uid = rop.role_uid
-WHERE mg.project_uid = ? and mgu.user_uid in (?)
+WHERE mg.project_uid = ? AND mgu.user_uid IN (?)
 UNION
 SELECT
   m.user_uid, mop.op_permission_uid, 'project' AS op_range_type, m.project_uid AS range_uids
 FROM members AS m
-JOIN member_op_permissions AS mop ON m.uid = mop.member_uid AND m.user_uid IN (?) AND m.project_uid = ?
+JOIN member_op_permissions AS mop ON m.uid = mop.member_uid
+WHERE m.user_uid IN (?) AND m.project_uid = ?
 UNION
 SELECT
   DISTINCT mgu.user_uid, mgop.op_permission_uid, 'project' AS op_range_type, mg.project_uid AS range_uids
 FROM member_groups mg
 JOIN member_group_users mgu ON mg.uid = mgu.member_group_uid
 JOIN member_group_op_permissions AS mgop ON mg.uid = mgop.member_group_uid
 WHERE mg.project_uid = ? AND mgu.user_uid IN (?)
Suggestion importance[1-10]: 6

__

Why: 这个建议提出重构 SQL 的 UNION 分支,特别是将部分连接条件从 JOIN 子句中剥离出来放到 WHERE 条件中,能提高查询的可读性和维护性,但影响有限,因此评分为 6。

Low

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant