diff options
author | 无闻 <u@gogs.io> | 2015-02-11 12:43:13 -0500 |
---|---|---|
committer | 无闻 <u@gogs.io> | 2015-02-11 12:43:13 -0500 |
commit | e805fdb29cdf8ceabe271a5f26472ae1dc34abff (patch) | |
tree | 3f861b6ea56c70d549e2a241be677ec7b0eab04e /models/access.go | |
parent | 6ed96b7a20b8b53ef958808cc414d59b72b7fa5c (diff) | |
parent | 03af37554e34582e8c5a9d98ec9f2d3c9884f0d8 (diff) |
Merge pull request #925 from phsmit/newcollaboration
Collaboration
Diffstat (limited to 'models/access.go')
-rw-r--r-- | models/access.go | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/models/access.go b/models/access.go index 81aa43dc..64bb9214 100644 --- a/models/access.go +++ b/models/access.go @@ -78,3 +78,27 @@ func HasAccess(uname, repoName string, mode AccessType) (bool, error) { } return true, nil } + +// GetAccessibleRepositories finds all repositories where a user has access to, +// besides his own. +func (u *User) GetAccessibleRepositories() (map[*Repository]AccessType, error) { + accesses := make([]*Access, 0, 10) + if err := x.Find(&accesses, &Access{UserName: u.LowerName}); err != nil { + return nil, err + } + + repos := make(map[*Repository]AccessType, len(accesses)) + for _, access := range accesses { + repo, err := GetRepositoryByRef(access.RepoName) + if err != nil { + return nil, err + } + err = repo.GetOwner() + if err != nil { + return nil, err + } + repos[repo] = access.Mode + } + + return repos, nil +} |