From f8ae161c743f3249e4b580cddc46da41b98652a9 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Fri, 13 Nov 2015 17:37:02 -0500 Subject: fix #1302 --- models/access.go | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) (limited to 'models/access.go') diff --git a/models/access.go b/models/access.go index fe8bf2c1..9e8c2dfe 100644 --- a/models/access.go +++ b/models/access.go @@ -67,9 +67,8 @@ func HasAccess(u *User, repo *Repository, testMode AccessMode) (bool, error) { return hasAccess(x, u, repo, testMode) } -// GetAccessibleRepositories finds all repositories where a user has access to, -// besides he/she owns. -func (u *User) GetAccessibleRepositories() (map[*Repository]AccessMode, error) { +// GetRepositoryAccesses finds all repositories with their access mode where a user has access but does not own. +func (u *User) GetRepositoryAccesses() (map[*Repository]AccessMode, error) { accesses := make([]*Access, 0, 10) if err := x.Find(&accesses, &Access{UserID: u.Id}); err != nil { return nil, err @@ -80,7 +79,7 @@ func (u *User) GetAccessibleRepositories() (map[*Repository]AccessMode, error) { repo, err := GetRepositoryByID(access.RepoID) if err != nil { if IsErrRepoNotExist(err) { - log.Error(4, "%v", err) + log.Error(4, "GetRepositoryByID: %v", err) continue } return nil, err @@ -92,11 +91,24 @@ func (u *User) GetAccessibleRepositories() (map[*Repository]AccessMode, error) { } repos[repo] = access.Mode } - - // FIXME: should we generate an ordered list here? Random looks weird. return repos, nil } +// GetAccessibleRepositories finds all repositories where a user has access but does not own. +func (u *User) GetAccessibleRepositories() ([]*Repository, error) { + accesses := make([]*Access, 0, 10) + if err := x.Find(&accesses, &Access{UserID: u.Id}); err != nil { + return nil, err + } + + repoIDs := make([]int64, 0, len(accesses)) + for _, access := range accesses { + repoIDs = append(repoIDs, access.RepoID) + } + repos := make([]*Repository, 0, len(repoIDs)) + return repos, x.Where("owner_id != ?", u.Id).In("id", repoIDs).Desc("updated").Find(&repos) +} + func maxAccessMode(modes ...AccessMode) AccessMode { max := ACCESS_MODE_NONE for _, mode := range modes { -- cgit v1.2.3 From 4d3138cd1074a29b7f68227f6a900344136cabe9 Mon Sep 17 00:00:00 2001 From: Unknwon Date: Sun, 15 Nov 2015 14:55:12 -0500 Subject: fix #1953 --- models/access.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'models/access.go') diff --git a/models/access.go b/models/access.go index 9e8c2dfe..8a7729b7 100644 --- a/models/access.go +++ b/models/access.go @@ -101,6 +101,10 @@ func (u *User) GetAccessibleRepositories() ([]*Repository, error) { return nil, err } + if len(accesses) == 0 { + return []*Repository{}, nil + } + repoIDs := make([]int64, 0, len(accesses)) for _, access := range accesses { repoIDs = append(repoIDs, access.RepoID) -- cgit v1.2.3 From 2158e6fc43a17e8290f2ae1123d67ba01fab0f3f Mon Sep 17 00:00:00 2001 From: Unknwon Date: Thu, 19 Nov 2015 11:40:00 -0500 Subject: fix #1997 --- gogs.go | 2 +- models/access.go | 20 ++++++++++---------- modules/middleware/repo.go | 2 +- templates/.VERSION | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) (limited to 'models/access.go') diff --git a/gogs.go b/gogs.go index af403e00..4e3cf117 100644 --- a/gogs.go +++ b/gogs.go @@ -17,7 +17,7 @@ import ( "github.com/gogits/gogs/modules/setting" ) -const APP_VER = "0.7.18.1118 Beta" +const APP_VER = "0.7.18.1119 Beta" func init() { runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/models/access.go b/models/access.go index 8a7729b7..5eef3281 100644 --- a/models/access.go +++ b/models/access.go @@ -36,19 +36,19 @@ func accessLevel(e Engine, u *User, repo *Repository) (AccessMode, error) { mode = ACCESS_MODE_READ } - if u != nil { - if u.Id == repo.OwnerID { - return ACCESS_MODE_OWNER, nil - } + if u == nil { + return mode, nil + } - a := &Access{UserID: u.Id, RepoID: repo.ID} - if has, err := e.Get(a); !has || err != nil { - return mode, err - } - return a.Mode, nil + if u.Id == repo.OwnerID { + return ACCESS_MODE_OWNER, nil } - return mode, nil + a := &Access{UserID: u.Id, RepoID: repo.ID} + if has, err := e.Get(a); !has || err != nil { + return mode, err + } + return a.Mode, nil } // AccessLevel returns the Access a user has to a repository. Will return NoneAccess if the diff --git a/modules/middleware/repo.go b/modules/middleware/repo.go index a78e079d..7780fa5c 100644 --- a/modules/middleware/repo.go +++ b/modules/middleware/repo.go @@ -275,7 +275,7 @@ func RepoAssignment(redirect bool, args ...bool) macaron.Handler { } // Admin has super access. - if ctx.User.IsAdmin { + if ctx.IsSigned && ctx.User.IsAdmin { ctx.Repo.AccessMode = models.ACCESS_MODE_OWNER } else { mode, err := models.AccessLevel(ctx.User, repo) diff --git a/templates/.VERSION b/templates/.VERSION index a2ed39f2..aa65a45b 100644 --- a/templates/.VERSION +++ b/templates/.VERSION @@ -1 +1 @@ -0.7.18.1118 Beta \ No newline at end of file +0.7.18.1119 Beta \ No newline at end of file -- cgit v1.2.3