From a35d412491bb18fb3aa59e04d7be7d9f9f446787 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: Thu, 9 Jan 2025 16:50:19 -0500 Subject: [PATCH] add `UserOrgTeamPermCond` function this returns group ids where a user has permissions greater than or equal to `level` --- models/group/group_list.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/models/group/group_list.go b/models/group/group_list.go index d855f0143e..bb20b04af9 100644 --- a/models/group/group_list.go +++ b/models/group/group_list.go @@ -1,11 +1,12 @@ package group import ( + "context" + "code.gitea.io/gitea/models/perm" "code.gitea.io/gitea/models/unit" user_model "code.gitea.io/gitea/models/user" "code.gitea.io/gitea/modules/structs" - "context" "xorm.io/builder" ) @@ -31,6 +32,13 @@ func userOrgTeamGroupBuilder(userID int64) *builder.Builder { Where(builder.Eq{"`team_user`.uid": userID}) } +func UserOrgTeamPermCond(idStr string, userID int64, level perm.AccessMode) builder.Cond { + selCond := userOrgTeamGroupBuilder(userID) + selCond = selCond.InnerJoin("team", "`team`.id = `group_team`.team_id"). + And(builder.Or(builder.Gte{"`team`.authorize": level}, builder.Gte{"`group_team`.access_mode": level})) + return builder.In(idStr, selCond) +} + // UserOrgTeamGroupCond returns a condition to select ids of groups that a user's team can access func UserOrgTeamGroupCond(idStr string, userID int64) builder.Cond { return builder.In(idStr, userOrgTeamGroupBuilder(userID))