summaryrefslogtreecommitdiff
path: root/app/models/ability.rb
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2016-07-20 20:13:02 +0200
committerYorick Peterse <yorickpeterse@gmail.com>2016-07-29 12:51:18 +0200
commit002ad215818450d2cbbc5fa065850a953dc7ada8 (patch)
tree9ac1703e56bd460fd24c7a5c93a5c465a83127b7 /app/models/ability.rb
parent9b0e131b83cfc44d3132bddfefb6cbd4bff7d253 (diff)
downloadgitlab-ce-002ad215818450d2cbbc5fa065850a953dc7ada8.tar.gz
Method for returning issues readable by a userability-batch-issue-checking
The method Ability.issues_readable_by_user takes a list of users and an optional user and returns an Array of issues readable by said user. This method in turn is used by Banzai::ReferenceParser::IssueParser#nodes_visible_to_user so this method no longer needs to get all the available abilities just to check if a user has the "read_issue" ability. To test this I benchmarked an issue with 222 comments on my development environment. Using these changes the time spent in nodes_visible_to_user was reduced from around 120 ms to around 40 ms.
Diffstat (limited to 'app/models/ability.rb')
-rw-r--r--app/models/ability.rb10
1 files changed, 10 insertions, 0 deletions
diff --git a/app/models/ability.rb b/app/models/ability.rb
index e47c5539f60..d95a2507199 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -47,6 +47,16 @@ class Ability
end
end
+ # Returns an Array of Issues that can be read by the given user.
+ #
+ # issues - The issues to reduce down to those readable by the user.
+ # user - The User for which to check the issues
+ def issues_readable_by_user(issues, user = nil)
+ return issues if user && user.admin?
+
+ issues.select { |issue| issue.visible_to_user?(user) }
+ end
+
# List of possible abilities for anonymous user
def anonymous_abilities(user, subject)
if subject.is_a?(PersonalSnippet)