summaryrefslogtreecommitdiff
path: root/app/models/snippet.rb
diff options
context:
space:
mode:
authorMike Greiling <mike@pixelcog.com>2018-02-16 16:00:03 -0600
committerMike Greiling <mike@pixelcog.com>2018-02-16 16:00:03 -0600
commit8e65c13a586031928c681c4926d059df23ad5753 (patch)
treedf99f6a592a2d3f7f5fabb4c85c6b90f0343ca68 /app/models/snippet.rb
parentfa260ac8400b16bc19acc5740b47c596c1c903c0 (diff)
parentb236348388c46c0550ec6844df35ec2689c4060b (diff)
downloadgitlab-ce-8e65c13a586031928c681c4926d059df23ad5753.tar.gz
Merge branch 'master' into chart.html.haml-refactorchart.html.haml-refactor
* master: (484 commits) migrate admin:users:* to static bundle correct for missing break statement in dispatcher.js alias create and update actions to new and edit migrate projects:merge_requests:edit to static bundle migrate projects:merge_requests:creations:diffs to static bundle migrate projects:merge_requests:creations:new to static bundle migrate projects:issues:new and projects:issues:edit to static bundle migrate projects:branches:index to static bundle migrate projects:branches:new to static bundle migrate projects:compare:show to static bundle migrate projects:environments:metrics to static bundle migrate projects:milestones:* and groups:milestones:* to static bundle migrate explore:groups:index to static bundle migrate explore:projects:* to static bundle migrate dashboard:projects:* to static bundle migrate admin:jobs:index to static bundle migrate dashboard:todos:index to static bundle migrate groups:merge_requests to static bundle migrate groups:issues to static bundle migrate dashboard:merge_requests to static bundle ...
Diffstat (limited to 'app/models/snippet.rb')
-rw-r--r--app/models/snippet.rb21
1 files changed, 21 insertions, 0 deletions
diff --git a/app/models/snippet.rb b/app/models/snippet.rb
index 7c8716f8c18..a58c208279e 100644
--- a/app/models/snippet.rb
+++ b/app/models/snippet.rb
@@ -74,6 +74,27 @@ class Snippet < ActiveRecord::Base
@link_reference_pattern ||= super("snippets", /(?<snippet>\d+)/)
end
+ # Returns a collection of snippets that are either public or visible to the
+ # logged in user.
+ #
+ # This method does not verify the user actually has the access to the project
+ # the snippet is in, so it should be only used on a relation that's already scoped
+ # for project access
+ def self.public_or_visible_to_user(user = nil)
+ if user
+ authorized = user
+ .project_authorizations
+ .select(1)
+ .where('project_authorizations.project_id = snippets.project_id')
+
+ levels = Gitlab::VisibilityLevel.levels_for_user(user)
+
+ where('EXISTS (?) OR snippets.visibility_level IN (?) or snippets.author_id = (?)', authorized, levels, user.id)
+ else
+ public_to_user
+ end
+ end
+
def to_reference(from = nil, full: false)
reference = "#{self.class.reference_prefix}#{id}"