You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

userlist.go 1.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package models
  5. import (
  6. "fmt"
  7. "code.gitea.io/gitea/models/db"
  8. user_model "code.gitea.io/gitea/models/user"
  9. "code.gitea.io/gitea/modules/log"
  10. )
  11. // IsUserOrgOwner returns true if user is in the owner team of given organization.
  12. func IsUserOrgOwner(users user_model.UserList, orgID int64) map[int64]bool {
  13. results := make(map[int64]bool, len(users))
  14. for _, user := range users {
  15. results[user.ID] = false // Set default to false
  16. }
  17. ownerMaps, err := loadOrganizationOwners(db.GetEngine(db.DefaultContext), users, orgID)
  18. if err == nil {
  19. for _, owner := range ownerMaps {
  20. results[owner.UID] = true
  21. }
  22. }
  23. return results
  24. }
  25. func loadOrganizationOwners(e db.Engine, users user_model.UserList, orgID int64) (map[int64]*TeamUser, error) {
  26. if len(users) == 0 {
  27. return nil, nil
  28. }
  29. ownerTeam, err := getOwnerTeam(e, orgID)
  30. if err != nil {
  31. if IsErrTeamNotExist(err) {
  32. log.Error("Organization does not have owner team: %d", orgID)
  33. return nil, nil
  34. }
  35. return nil, err
  36. }
  37. userIDs := users.GetUserIDs()
  38. ownerMaps := make(map[int64]*TeamUser)
  39. err = e.In("uid", userIDs).
  40. And("org_id=?", orgID).
  41. And("team_id=?", ownerTeam.ID).
  42. Find(&ownerMaps)
  43. if err != nil {
  44. return nil, fmt.Errorf("find team users: %v", err)
  45. }
  46. return ownerMaps, nil
  47. }