Licensed feature availability

As of GitLab 9.4, we've been supporting a simplified version of licensed feature availability checks via ee/app/models/license.rb, both for on-premise or GitLab.com plans and features.

Restricting features scoped by namespaces or projects

GitLab.com plans are persisted on user groups and namespaces, therefore, if you're adding a feature such as Related issues or Service Desk, it should be restricted on namespace scope.

  1. Add the feature symbol on EES_FEATURES, EEP_FEATURES, or EEU_FEATURES constants in ee/app/models/license.rb. Note that the prefix EES signifies Starter, EEP signifies Premium, and EEU signifies Ultimate.
  2. Check using:
project.feature_available?(:feature_symbol)

Restricting global features (instance)

However, for features such as Geo and Database Load Balancing, which cannot be restricted to only a subset of projects or namespaces, the check is made directly in the instance license.

  1. Add the feature symbol on EES_FEATURES, EEP_FEATURES or EEU_FEATURES constants in ee/app/models/license.rb.
  2. Add the same feature symbol to GLOBAL_FEATURES.
  3. Check using:
License.feature_available?(:feature_symbol)

Restricting frontend features

To restrict frontend features based on the license, use push_licensed_feature. The frontend can then access this via this.glFeatures:

before_action do
  push_licensed_feature(:feature_symbol)
  # or by project/namespace
  push_licensed_feature(:feature_symbol, project)
end