AccessMode returns the access mode of given user has to the repository.
(ctx context.Context, userID, repoID int64, opts AccessModeOptions)
| 73 | |
| 74 | // AccessMode returns the access mode of given user has to the repository. |
| 75 | func (s *PermissionsStore) AccessMode(ctx context.Context, userID, repoID int64, opts AccessModeOptions) (mode AccessMode) { |
| 76 | if repoID <= 0 { |
| 77 | return AccessModeNone |
| 78 | } |
| 79 | |
| 80 | // Everyone has read access to public repository. |
| 81 | if !opts.Private { |
| 82 | mode = AccessModeRead |
| 83 | } |
| 84 | |
| 85 | // Anonymous user gets the default access. |
| 86 | if userID <= 0 { |
| 87 | return mode |
| 88 | } |
| 89 | |
| 90 | if userID == opts.OwnerID { |
| 91 | return AccessModeOwner |
| 92 | } |
| 93 | |
| 94 | access := new(Access) |
| 95 | err := s.db.WithContext(ctx).Where("user_id = ? AND repo_id = ?", userID, repoID).First(access).Error |
| 96 | if err != nil { |
| 97 | if !errors.Is(err, gorm.ErrRecordNotFound) { |
| 98 | log.Error("Failed to get access [user_id: %d, repo_id: %d]: %v", userID, repoID, err) |
| 99 | } |
| 100 | return mode |
| 101 | } |
| 102 | return access.Mode |
| 103 | } |
| 104 | |
| 105 | // Authorize returns true if the user has as good as desired access mode to the |
| 106 | // repository. |