mirror of
https://github.com/go-gitea/gitea.git
synced 2026-05-12 00:22:59 +02:00
[models/conds] add functions returning builders to help find repos matching various group-related conditions
This commit is contained in:
parent
09b5fa6e87
commit
c0898cc0e3
@ -303,6 +303,12 @@ func userOrgTeamRepoBuilder(userID int64) *builder.Builder {
|
||||
Where(builder.Eq{"`team_user`.uid": userID})
|
||||
}
|
||||
|
||||
// userOrgTeamRepoGroupBuilder selects repos that the given user has access to through team membership and group permissions
|
||||
func userOrgTeamRepoGroupBuilder(userID int64) *builder.Builder {
|
||||
return userOrgTeamRepoBuilder(userID).
|
||||
Join("INNER", "group_team", "`group_team`.team_id=`team_repo`.team_id")
|
||||
}
|
||||
|
||||
// userOrgTeamUnitRepoBuilder returns repo ids where user's teams can access the special unit.
|
||||
func userOrgTeamUnitRepoBuilder(userID int64, unitType unit.Type) *builder.Builder {
|
||||
return userOrgTeamRepoBuilder(userID).
|
||||
@ -311,6 +317,13 @@ func userOrgTeamUnitRepoBuilder(userID int64, unitType unit.Type) *builder.Build
|
||||
And(builder.Gt{"`team_unit`.`access_mode`": int(perm.AccessModeNone)})
|
||||
}
|
||||
|
||||
func userOrgTeamUnitRepoGroupBuilder(userID int64, unitType unit.Type) *builder.Builder {
|
||||
return userOrgTeamRepoGroupBuilder(userID).
|
||||
Join("INNER", "team_unit", "`team_unit`.team_id = `team_repo`.team_id").
|
||||
Where(builder.Eq{"`team_unit`.`type`": unitType}).
|
||||
And(builder.Gt{"`team_unit`.`access_mode`": int(perm.AccessModeNone)})
|
||||
}
|
||||
|
||||
// userOrgTeamUnitRepoCond returns a condition to select repo ids where user's teams can access the special unit.
|
||||
func userOrgTeamUnitRepoCond(idStr string, userID int64, unitType unit.Type) builder.Cond {
|
||||
return builder.In(idStr, userOrgTeamUnitRepoBuilder(userID, unitType))
|
||||
@ -324,6 +337,17 @@ func UserOrgUnitRepoCond(idStr string, userID, orgID int64, unitType unit.Type)
|
||||
)
|
||||
}
|
||||
|
||||
// ReposAccessibleByGroupTeamBuilder returns repositories that are accessible by a team via group permissions
|
||||
func ReposAccessibleByGroupTeamBuilder(teamID int64) *builder.Builder {
|
||||
innerGroupCond := builder.Select("`repo_group`.id").
|
||||
From("repo_group").
|
||||
InnerJoin("group_team", "`group_team`.group_id = `repo_group`.id").
|
||||
Where(builder.Eq{"`group_team`.team_id": teamID})
|
||||
return builder.Select("`repository`.id").
|
||||
From("repository").
|
||||
Where(builder.In("`repository`.group_id", innerGroupCond))
|
||||
}
|
||||
|
||||
// userOrgPublicRepoCond returns the condition that one user could access all public repositories in organizations
|
||||
func userOrgPublicRepoCond(userID int64) builder.Cond {
|
||||
return builder.And(
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user