diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 0d6b7105c..36fb9d682 100644 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -4,6 +4,8 @@ class PagesController < ApplicationController def show @page = Page.find_by!(slug: params[:slug]) + not_found unless FeatureFlag.accessible?(@page.feature_flag_name, current_user) + set_surrogate_key_header "show-page-#{params[:slug]}" end diff --git a/app/controllers/stories_controller.rb b/app/controllers/stories_controller.rb index 44fa510a7..02fe7313a 100644 --- a/app/controllers/stories_controller.rb +++ b/app/controllers/stories_controller.rb @@ -111,8 +111,12 @@ class StoriesController < ApplicationController Honeycomb.add_field("stories_route", "org") handle_organization_index elsif @page - Honeycomb.add_field("stories_route", "page") - handle_page_display + if FeatureFlag.accessible?(@page.feature_flag_name, current_user) + Honeycomb.add_field("stories_route", "page") + handle_page_display + else + not_found + end else Honeycomb.add_field("stories_route", "user") handle_user_index diff --git a/app/helpers/feature_flag.rb b/app/helpers/feature_flag.rb index 6e7d9d559..737ce0c91 100644 --- a/app/helpers/feature_flag.rb +++ b/app/helpers/feature_flag.rb @@ -1,7 +1,9 @@ module FeatureFlag - extend self # rubocop:disable Style/ModuleFunction + class << self + delegate :enabled?, :exist?, to: Flipper - def enabled?(feature_name, *args) - Flipper[feature_name].enabled?(*args) + def accessible?(feature_flag_name, *args) + feature_flag_name.blank? || !exist?(feature_flag_name) || enabled?(feature_flag_name, *args) + end end end diff --git a/app/models/page.rb b/app/models/page.rb index 95f656f82..9bddc3107 100644 --- a/app/models/page.rb +++ b/app/models/page.rb @@ -18,6 +18,10 @@ class Page < ApplicationRecord is_top_level_path ? "/#{slug}" : "/page/#{slug}" end + def feature_flag_name + "page_#{slug}" + end + private def evaluate_markdown diff --git a/app/views/internal/pages/_form.html.erb b/app/views/internal/pages/_form.html.erb index 534f10e0f..085f5b57a 100644 --- a/app/views/internal/pages/_form.html.erb +++ b/app/views/internal/pages/_form.html.erb @@ -23,7 +23,7 @@
(Determines if it is accessible by /page-slug vs /page/page-slug) Be careful! ⚠️
+ <%= link_to "Feature Flag", "/internal/feature_flags" %>
+ ">
+ <%= FeatureFlag.exist?(@page.feature_flag_name) ? "Present" : "Not Present" %>
+
+
+ <% if FeatureFlag.exist?(@page.feature_flag_name) %>
+ Access to this page is being guarded by the feature flag <%= @page.feature_flag_name %>.
+ <%= link_to "Modify flag here", "/internal/feature_flags/features/#{@page.feature_flag_name}" %>
+ <% else %>
+ Everyone has access. Optionally guard access to this page by creating feature <%= @page.feature_flag_name %>
+ <%= link_to "here", "/internal/feature_flags/features/" %>
+ <% end %>
+
+
+