From 5b1e66c712ff16c57f59e3f66678116dcad7783d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=98=99=E2=97=A6=20The=20Tablet=20=E2=9D=80=20GamerGirla?= =?UTF-8?q?ndCo=20=E2=97=A6=E2=9D=A7?= Date: Fri, 27 Dec 2024 22:10:38 -0500 Subject: [PATCH] refactor subgroup loading, add method to load only groups accessible by a user --- models/group/group.go | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/models/group/group.go b/models/group/group.go index 668914dfd7..9c39568bf8 100644 --- a/models/group/group.go +++ b/models/group/group.go @@ -2,6 +2,7 @@ package group import ( "code.gitea.io/gitea/models/db" + "code.gitea.io/gitea/models/unit" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" @@ -45,7 +46,7 @@ func init() { db.RegisterModel(new(Group)) } -func (g *Group) doLoadSubgroups(ctx context.Context, recursive bool, currentLevel int) error { +func (g *Group) doLoadSubgroups(ctx context.Context, recursive bool, cond builder.Cond, currentLevel int) error { if currentLevel >= 20 { return ErrGroupTooDeep{ g.ID, @@ -55,15 +56,13 @@ func (g *Group) doLoadSubgroups(ctx context.Context, recursive bool, currentLeve return nil } var err error - g.Subgroups, err = FindGroups(ctx, &FindGroupsOptions{ - ParentGroupID: g.ID, - }) + g.Subgroups, err = FindGroupsByCond(ctx, cond, g.ID) if err != nil { return err } if recursive { for _, group := range g.Subgroups { - err = group.doLoadSubgroups(ctx, recursive, currentLevel+1) + err = group.doLoadSubgroups(ctx, recursive, cond, currentLevel+1) if err != nil { return err } @@ -73,8 +72,14 @@ func (g *Group) doLoadSubgroups(ctx context.Context, recursive bool, currentLeve } func (g *Group) LoadSubgroups(ctx context.Context, recursive bool) error { - err := g.doLoadSubgroups(ctx, recursive, 0) - return err + fgo := &FindGroupsOptions{ + ParentGroupID: g.ID, + } + return g.doLoadSubgroups(ctx, recursive, fgo.ToConds(), 0) +} + +func (g *Group) LoadAccessibleSubgroups(ctx context.Context, recursive bool, doer *user_model.User) error { + return g.doLoadSubgroups(ctx, recursive, AccessibleGroupCondition(doer, unit.TypeInvalid), 0) } func (g *Group) LoadAttributes(ctx context.Context) error {