diff options
Diffstat (limited to 'models/access.go')
-rw-r--r-- | models/access.go | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/models/access.go b/models/access.go index 81aa43dc..65f1d003 100644 --- a/models/access.go +++ b/models/access.go @@ -78,3 +78,23 @@ 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 + } + repos[repo] = access.Mode + } + + return repos, nil +} |