Commit 2dd2a07f authored by Imre Farkas's avatar Imre Farkas

Merge branch '18165-add-access-control-for-restricted-public-level' into 'master'

Restrict page access when visibility is restricted to Public

See merge request gitlab-org/gitlab!22522
parents 13f7f179 33401ff1
......@@ -496,6 +496,10 @@ class ApplicationController < ActionController::Base
html_request? && !devise_controller?
end
def public_visibility_restricted?
Gitlab::CurrentSettings.restricted_visibility_levels.include? Gitlab::VisibilityLevel::PUBLIC
end
def set_usage_stats_consent_flag
return unless current_user
return if sessionless_user?
......
# frozen_string_literal: true
class Explore::ApplicationController < ApplicationController
skip_before_action :authenticate_user!
skip_before_action :authenticate_user!, unless: :public_visibility_restricted?
layout 'explore'
end
# frozen_string_literal: true
class HelpController < ApplicationController
skip_before_action :authenticate_user!
skip_before_action :authenticate_user!, unless: :public_visibility_restricted?
layout 'help'
......
......@@ -51,6 +51,10 @@ module ExploreHelper
links.any? { |link| explore_nav_link?(link) }
end
def public_visibility_restricted?
Gitlab::CurrentSettings.restricted_visibility_levels.include? Gitlab::VisibilityLevel::PUBLIC
end
private
def get_explore_nav_links
......
......@@ -38,7 +38,9 @@
%hr.footer-fixed
.container.footer-container
.footer-links
= link_to _("Explore"), explore_root_path
= link_to _("Help"), help_path
- if !public_visibility_restricted?
= link_to _("Explore"), explore_root_path
= link_to _("Help"), help_path
= link_to _("About GitLab"), "https://about.gitlab.com/"
= footer_message
......@@ -14,7 +14,8 @@
%hr
.container
.footer-links
= link_to _("Explore"), explore_root_path
= link_to _("Help"), help_path
- if !public_visibility_restricted?
= link_to _("Explore"), explore_root_path
= link_to _("Help"), help_path
= link_to _("About GitLab"), "https://about.gitlab.com/"
= footer_message
......@@ -205,7 +205,7 @@ On the EC2 dashboard, look for Load Balancer in the left navigation bar:
1. Click **Configure Health Check** and set up a health check for your EC2 instances.
1. For **Ping Protocol**, select HTTP.
1. For **Ping Port**, enter 80.
1. For **Ping Path**, enter `/explore`. (We use `/explore` as it's a public endpoint that does
1. For **Ping Path**, enter `/users/sign_in`. (We use `/users/sign_in` as it's a public endpoint that does
not require authorization.)
1. Keep the default **Advanced Details** or adjust them according to your needs.
1. Click **Add EC2 Instances** but, as we don't have any instances to add yet, come back
......
......@@ -69,6 +69,16 @@ you are privileged to.
If the public level is restricted, user profiles are only visible to logged in users.
## Visibility of pages
By default, the following directories are visible to unauthenticated users:
- Public access (`/public`).
- Explore (`/explore`).
- Help (`/help`).
However, if the access level of the `/public` directory is restricted, these directories are visible only to logged in users.
## Restricting the use of public or internal projects
You can restrict the use of visibility levels for users when they create a project or a
......
......@@ -91,7 +91,7 @@ For more details on group visibility, see [Public access](../../../public_access
## Restricted visibility levels
To set the available visibility levels for new projects and snippets:
To set the available visibility levels for projects, snippets, and selected pages:
1. Check the desired visibility levels.
1. Click **Save changes**.
......
---
title: Restrict page access when restricted level is public
merge_request: 22522
author: briankabiro
type: added
......@@ -186,4 +186,35 @@ describe 'Login' do
end
end
end
describe 'restricted visibility levels' do
context 'contains public level' do
before do
stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
end
it 'hides Explore link' do
visit new_user_session_path
expect(page).to have_no_link("Explore")
end
it 'hides help link' do
visit new_user_session_path
expect(page).to have_no_link("Help")
end
end
context 'does not contain public level' do
it 'displays Explore and Help links' do
visit new_user_session_path
href = find_link("Help")[:href]
expect(href).to eq("/help")
expect(page).to have_link("Explore")
end
end
end
end
# frozen_string_literal: true
require 'spec_helper'
describe 'Signup' do
context 'almost there page' do
context 'when public visibility is restricted' do
before do
stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
end
it 'hides Explore link' do
visit users_almost_there_path
expect(page).to have_no_link("Explore")
end
it 'hides help link' do
visit users_almost_there_path
expect(page).to have_no_link("Help")
end
end
end
end
......@@ -22,4 +22,18 @@ describe Explore::GroupsController do
expect(assigns(:groups)).to contain_exactly(member_of_group, public_group)
end
context 'restricted visibility level is public' do
before do
sign_out(user)
stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
end
it 'redirects to login page' do
get :index
expect(response).to redirect_to new_user_session_path
end
end
end
......@@ -171,5 +171,17 @@ describe Explore::ProjectsController do
get :index, params: { sort: sorting_param }
end
end
context 'restricted visibility level is public' do
before do
stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
end
it 'redirects to login page' do
get :index
expect(response).to redirect_to new_user_session_path
end
end
end
end
......@@ -79,6 +79,20 @@ describe HelpController do
expect(assigns[:help_index]).to eq '[protocol-relative](//example.com)'
end
end
context 'restricted visibility set to public' do
before do
sign_out(user)
stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
end
it 'redirects to sign_in path' do
get :index
expect(response).to redirect_to(new_user_session_path)
end
end
end
describe 'GET #show' do
......
......@@ -89,5 +89,17 @@ describe 'Explore Groups', :js do
end
it_behaves_like 'renders group in public groups area'
context 'when visibility is restricted to public' do
before do
stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
end
it 'redirects to the sign in page' do
visit explore_groups_path
expect(page).to have_current_path(new_user_session_path)
end
end
end
end
......@@ -16,6 +16,17 @@ describe 'User explores projects' do
include_examples 'shows public projects'
end
context 'when visibility is restricted to public' do
before do
stub_application_setting(restricted_visibility_levels: [Gitlab::VisibilityLevel::PUBLIC])
visit(explore_projects_path)
end
it 'redirects to login page' do
expect(page).to have_current_path(new_user_session_path)
end
end
end
context 'when signed in' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment