Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

team_repo.go 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package organization
  4. import (
  5. "context"
  6. "code.gitea.io/gitea/models/db"
  7. "code.gitea.io/gitea/models/perm"
  8. repo_model "code.gitea.io/gitea/models/repo"
  9. "xorm.io/builder"
  10. )
  11. // TeamRepo represents an team-repository relation.
  12. type TeamRepo struct {
  13. ID int64 `xorm:"pk autoincr"`
  14. OrgID int64 `xorm:"INDEX"`
  15. TeamID int64 `xorm:"UNIQUE(s)"`
  16. RepoID int64 `xorm:"UNIQUE(s)"`
  17. }
  18. // HasTeamRepo returns true if given repository belongs to team.
  19. func HasTeamRepo(ctx context.Context, orgID, teamID, repoID int64) bool {
  20. has, _ := db.GetEngine(ctx).
  21. Where("org_id=?", orgID).
  22. And("team_id=?", teamID).
  23. And("repo_id=?", repoID).
  24. Get(new(TeamRepo))
  25. return has
  26. }
  27. type SearchTeamRepoOptions struct {
  28. db.ListOptions
  29. TeamID int64
  30. }
  31. // GetRepositories returns paginated repositories in team of organization.
  32. func GetTeamRepositories(ctx context.Context, opts *SearchTeamRepoOptions) (repo_model.RepositoryList, error) {
  33. sess := db.GetEngine(ctx)
  34. if opts.TeamID > 0 {
  35. sess = sess.In("id",
  36. builder.Select("repo_id").
  37. From("team_repo").
  38. Where(builder.Eq{"team_id": opts.TeamID}),
  39. )
  40. }
  41. if opts.PageSize > 0 {
  42. sess.Limit(opts.PageSize, (opts.Page-1)*opts.PageSize)
  43. }
  44. var repos []*repo_model.Repository
  45. return repos, sess.OrderBy("repository.name").
  46. Find(&repos)
  47. }
  48. // AddTeamRepo adds a repo for an organization's team
  49. func AddTeamRepo(ctx context.Context, orgID, teamID, repoID int64) error {
  50. _, err := db.GetEngine(ctx).Insert(&TeamRepo{
  51. OrgID: orgID,
  52. TeamID: teamID,
  53. RepoID: repoID,
  54. })
  55. return err
  56. }
  57. // RemoveTeamRepo remove repository from team
  58. func RemoveTeamRepo(ctx context.Context, teamID, repoID int64) error {
  59. _, err := db.DeleteByBean(ctx, &TeamRepo{
  60. TeamID: teamID,
  61. RepoID: repoID,
  62. })
  63. return err
  64. }
  65. // GetTeamsWithAccessToRepo returns all teams in an organization that have given access level to the repository.
  66. func GetTeamsWithAccessToRepo(ctx context.Context, orgID, repoID int64, mode perm.AccessMode) ([]*Team, error) {
  67. teams := make([]*Team, 0, 5)
  68. return teams, db.GetEngine(ctx).Where("team.authorize >= ?", mode).
  69. Join("INNER", "team_repo", "team_repo.team_id = team.id").
  70. And("team_repo.org_id = ?", orgID).
  71. And("team_repo.repo_id = ?", repoID).
  72. OrderBy("name").
  73. Find(&teams)
  74. }