summaryrefslogtreecommitdiffstats
path: root/models/repo_permission.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/repo_permission.go')
-rw-r--r--models/repo_permission.go20
1 files changed, 20 insertions, 0 deletions
diff --git a/models/repo_permission.go b/models/repo_permission.go
index 782b195629..79d7dd012b 100644
--- a/models/repo_permission.go
+++ b/models/repo_permission.go
@@ -369,3 +369,23 @@ func hasAccess(e Engine, userID int64, repo *Repository) (bool, error) {
func HasAccess(userID int64, repo *Repository) (bool, error) {
return hasAccess(x, userID, repo)
}
+
+// FilterOutRepoIdsWithoutUnitAccess filter out repos where user has no access to repositories
+func FilterOutRepoIdsWithoutUnitAccess(u *User, repoIDs []int64, units ...UnitType) ([]int64, error) {
+ i := 0
+ for _, rID := range repoIDs {
+ repo, err := GetRepositoryByID(rID)
+ if err != nil {
+ return nil, err
+ }
+ perm, err := GetUserRepoPermission(repo, u)
+ if err != nil {
+ return nil, err
+ }
+ if perm.CanReadAny(units...) {
+ repoIDs[i] = rID
+ i++
+ }
+ }
+ return repoIDs[:i], nil
+}