From ff35a37769cbf60cd1522eb05411adbf965c9950 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Fri, 28 Aug 2015 13:51:15 +0800 Subject: [PATCH] #1458: Authorities were messed up when using mysql database --- gogs.go | 2 +- models/access.go | 67 +++++++++++++++++++--------------------------- models/org.go | 2 +- routers/install.go | 2 -- templates/.VERSION | 2 +- 5 files changed, 30 insertions(+), 45 deletions(-) diff --git a/gogs.go b/gogs.go index f661dc77d..dc7027878 100644 --- a/gogs.go +++ b/gogs.go @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.6.6.0827 Beta" +const APP_VER = "0.6.6.0828 Beta" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/models/access.go b/models/access.go index 917f1c280..fe8bf2c17 100644 --- a/models/access.go +++ b/models/access.go @@ -145,25 +145,6 @@ func (repo *Repository) refreshCollaboratorAccesses(e Engine, accessMap map[int6 for _, c := range collaborators { accessMap[c.Id] = ACCESS_MODE_WRITE } - - // Adds team members access. - if repo.Owner.IsOrganization() { - if err = repo.Owner.GetTeams(); err != nil { - return fmt.Errorf("GetTeams: %v", err) - } - for _, t := range repo.Owner.Teams { - if err = t.GetMembers(); err != nil { - return fmt.Errorf("GetMembers: %v", err) - } - for _, m := range t.Members { - if t.IsOwnerTeam() { - accessMap[m.Id] = ACCESS_MODE_OWNER - } else { - accessMap[m.Id] = maxAccessMode(accessMap[m.Id], t.Authorize) - } - } - } - } return nil } @@ -175,34 +156,36 @@ func (repo *Repository) recalculateTeamAccesses(e Engine, ignTeamID int64) (err if err = repo.getOwner(e); err != nil { return err + } else if !repo.Owner.IsOrganization() { + return fmt.Errorf("owner is not an organization: %d", repo.OwnerID) } + if err = repo.refreshCollaboratorAccesses(e, accessMap); err != nil { return fmt.Errorf("refreshCollaboratorAccesses: %v", err) } - if repo.Owner.IsOrganization() { - if err = repo.Owner.getTeams(e); err != nil { - return err + + if err = repo.Owner.getTeams(e); err != nil { + return err + } + + for _, t := range repo.Owner.Teams { + if t.ID == ignTeamID { + continue } - for _, t := range repo.Owner.Teams { - if t.ID == ignTeamID { - continue - } + // Owner team gets owner access, and skip for teams that do not + // have relations with repository. + if t.IsOwnerTeam() { + t.Authorize = ACCESS_MODE_OWNER + } else if !t.hasRepository(e, repo.ID) { + continue + } - // Owner team gets owner access, and skip for teams that do not - // have relations with repository. - if t.IsOwnerTeam() { - t.Authorize = ACCESS_MODE_OWNER - } else if !t.hasRepository(e, repo.ID) { - continue - } - - if err = t.getMembers(e); err != nil { - return fmt.Errorf("getMembers '%d': %v", t.ID, err) - } - for _, m := range t.Members { - accessMap[m.Id] = maxAccessMode(accessMap[m.Id], t.Authorize) - } + if err = t.getMembers(e); err != nil { + return fmt.Errorf("getMembers '%d': %v", t.ID, err) + } + for _, m := range t.Members { + accessMap[m.Id] = maxAccessMode(accessMap[m.Id], t.Authorize) } } @@ -210,6 +193,10 @@ func (repo *Repository) recalculateTeamAccesses(e Engine, ignTeamID int64) (err } func (repo *Repository) recalculateAccesses(e Engine) error { + if repo.Owner.IsOrganization() { + return repo.recalculateTeamAccesses(e, 0) + } + accessMap := make(map[int64]AccessMode, 20) if err := repo.refreshCollaboratorAccesses(e, accessMap); err != nil { return fmt.Errorf("refreshCollaboratorAccesses: %v", err) diff --git a/models/org.go b/models/org.go index b8d194567..dfd720fad 100644 --- a/models/org.go +++ b/models/org.go @@ -483,7 +483,7 @@ func (t *Team) hasRepository(e Engine, repoID int64) bool { // HasRepository returns true if given repository belong to team. func (t *Team) HasRepository(repoID int64) bool { - return HasTeamRepo(t.OrgID, t.ID, repoID) + return t.hasRepository(x, repoID) } func (t *Team) addRepository(e Engine, repo *Repository) (err error) { diff --git a/routers/install.go b/routers/install.go index 3fcaee8db..0a8af4f28 100644 --- a/routers/install.go +++ b/routers/install.go @@ -39,8 +39,6 @@ func checkRunMode() { macaron.Env = macaron.PROD macaron.ColorLog = false setting.ProdMode = true - case "test": - macaron.Env = macaron.TEST } log.Info("Run Mode: %s", strings.Title(macaron.Env)) } diff --git a/templates/.VERSION b/templates/.VERSION index a82682d43..7ff14d43a 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.6.6.0827 Beta \ No newline at end of file +0.6.6.0828 Beta \ No newline at end of file