Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/concerns/featurable.rb')
-rw-r--r--app/models/concerns/featurable.rb38
1 files changed, 35 insertions, 3 deletions
diff --git a/app/models/concerns/featurable.rb b/app/models/concerns/featurable.rb
index 70d67fc7559..08189d83534 100644
--- a/app/models/concerns/featurable.rb
+++ b/app/models/concerns/featurable.rb
@@ -50,7 +50,7 @@ module Featurable
end
def available_features
- @available_features
+ @available_features || []
end
def access_level_attribute(feature)
@@ -74,6 +74,12 @@ module Featurable
STRING_OPTIONS.key(level)
end
+ def required_minimum_access_level(feature)
+ ensure_feature!(feature)
+
+ Gitlab::Access::GUEST
+ end
+
def ensure_feature!(feature)
feature = feature.model_name.plural if feature.respond_to?(:model_name)
feature = feature.to_sym
@@ -91,8 +97,8 @@ module Featurable
public_send(self.class.access_level_attribute(feature)) # rubocop:disable GitlabSecurity/PublicSend
end
- def feature_available?(feature, user)
- get_permission(user, feature)
+ def feature_available?(feature, user = nil)
+ has_permission?(user, feature)
end
def string_access_level(feature)
@@ -115,4 +121,30 @@ module Featurable
def feature_validation_exclusion
[]
end
+
+ def has_permission?(user, feature)
+ case access_level(feature)
+ when DISABLED
+ false
+ when PRIVATE
+ member?(user, feature)
+ when ENABLED
+ true
+ when PUBLIC
+ true
+ else
+ true
+ end
+ end
+
+ def member?(user, feature)
+ return false unless user
+ return true if user.can_read_all_resources?
+
+ resource_member?(user, feature)
+ end
+
+ def resource_member?(user, feature)
+ raise NotImplementedError
+ end
end