Skip to content

Commit 35fc83a

Browse files
Merge pull request #2424 from actiontech/main
Main
2 parents a4ca0cb + 1a4de3d commit 35fc83a

File tree

3 files changed

+41
-6
lines changed

3 files changed

+41
-6
lines changed

sqle/api/controller/v1/sql_audit_record.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"net/http"
1313
"os"
1414
"path/filepath"
15+
"strconv"
1516
"strings"
1617
"time"
1718

@@ -682,20 +683,33 @@ func GetSQLAuditRecordsV1(c echo.Context) error {
682683
}
683684

684685
limit, offset := controller.GetLimitAndOffset(req.PageIndex, req.PageSize)
685-
hasPermission, err := hasViewPermission(user.GetIDStr(), projectUid, v1.OpPermissionViewQuickAuditRecord)
686-
686+
up, err := dms.NewUserPermission(user.GetIDStr(), projectUid)
687+
if err != nil {
688+
return controller.JSONBaseErrorReq(c, fmt.Errorf("check project manager failed: %v", err))
689+
}
690+
canViewProject := up.CanViewProject()
691+
viewQuickAuditRecordPermission := up.GetOnePermission(v1.OpPermissionViewQuickAuditRecord)
687692
data := map[string]interface{}{
688693
"filter_project_id": projectUid,
689694
"filter_creator_id": user.ID,
690695
"fuzzy_search_tags": req.FuzzySearchTags,
691-
"filter_instance_id": req.FilterInstanceId,
696+
"filter_instance_ids": req.FilterInstanceId,
692697
"filter_create_time_from": req.FilterCreateTimeFrom,
693698
"filter_create_time_to": req.FilterCreateTimeTo,
694-
"check_user_can_access": !hasPermission,
699+
"check_user_can_access": !canViewProject,
695700
"filter_audit_record_ids": req.FilterSqlAuditRecordIDs,
696701
"limit": limit,
697702
"offset": offset,
698703
}
704+
if !canViewProject && viewQuickAuditRecordPermission != nil {
705+
rangeUids := viewQuickAuditRecordPermission.RangeUids
706+
if req.FilterInstanceId != 0 {
707+
rangeUids = utils.FindIntersection(rangeUids, []string{strconv.FormatUint(req.FilterInstanceId, 10)})
708+
}
709+
data["filter_instance_ids"] = fmt.Sprintf("\"%s\"", strings.Join(rangeUids, "\",\""))
710+
data["check_user_can_access"] = false
711+
}
712+
699713
if req.FilterSQLAuditStatus == SQLAuditRecordStatusAuditing {
700714
data["filter_task_status_exclude"] = model.TaskStatusAudited
701715
} else if req.FilterSQLAuditStatus == SQLAuditRecordStatusSuccessfully {

sqle/model/sql_audit_record_list.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,8 @@ AND tasks.status = :filter_task_status
7676
AND tasks.status <> :filter_task_status_exclude
7777
{{- end }}
7878
79-
{{- if .filter_instance_id }}
80-
AND tasks.instance_id = :filter_instance_id
79+
{{- if .filter_instance_ids }}
80+
AND tasks.instance_id IN ( {{ .filter_instance_ids }} )
8181
{{- end }}
8282
8383
{{- if .filter_create_time_from }}

sqle/utils/util.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,3 +489,24 @@ func GenerateSSHKeyPair() (privateKeyStr, publicKeyStr string, err error) {
489489

490490
return string(privatePEM), publicKeyStr, nil
491491
}
492+
493+
func FindIntersection(slice1, slice2 []string) []string {
494+
map1 := make(map[string]bool)
495+
map2 := make(map[string]bool)
496+
497+
// 填充第一个 map
498+
for _, item := range slice1 {
499+
map1[item] = true
500+
}
501+
502+
// 填充第二个 map 并查找交集
503+
var intersection []string
504+
for _, item := range slice2 {
505+
if map1[item] && !map2[item] {
506+
intersection = append(intersection, item)
507+
}
508+
map2[item] = true
509+
}
510+
511+
return intersection
512+
}

0 commit comments

Comments
 (0)