55 lines
1.9 KiB
Markdown
55 lines
1.9 KiB
Markdown
---
|
|
stage: Fulfillment
|
|
group: Provision
|
|
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
|
---
|
|
|
|
# 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](../user/project/issues/related_issues.md) or
|
|
[Service Desk](../user/project/service_desk.md),
|
|
it should be restricted on namespace scope.
|
|
|
|
1. Add the feature symbol on `STARTER_FEATURES`, `PREMIUM_FEATURES`, or `ULTIMATE_FEATURES` constants in
|
|
`ee/app/models/gitlab_subscriptions/features.rb`.
|
|
1. Check using:
|
|
|
|
```ruby
|
|
project.feature_available?(:feature_symbol)
|
|
```
|
|
|
|
## Restricting global features (instance)
|
|
|
|
However, for features such as [Geo](../administration/geo/index.md) and
|
|
[Database Load Balancing](../administration/postgresql/database_load_balancing.md), 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 to `STARTER_FEATURES`, `PREMIUM_FEATURES` or `ULTIMATE_FEATURES` constants in
|
|
`ee/app/models/gitlab_subscriptions/features.rb`.
|
|
1. Add the same feature symbol to `GLOBAL_FEATURES`.
|
|
1. Check using:
|
|
|
|
```ruby
|
|
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`:
|
|
|
|
```ruby
|
|
before_action do
|
|
push_licensed_feature(:feature_symbol)
|
|
# or by project/namespace
|
|
push_licensed_feature(:feature_symbol, project)
|
|
end
|
|
```
|