summaryrefslogtreecommitdiff
path: root/app/contexts
diff options
context:
space:
mode:
authorJason Hollingsworth <jhworth.developer@gmail.com>2013-11-06 09:13:21 -0600
committerJason Hollingsworth <jhworth.developer@gmail.com>2013-11-26 22:22:07 -0600
commitd9bb4230cc3aa161876df821c34d8e9c53d2e7a6 (patch)
treed9923bbf4ebe3f6cf96f71cdcfe4c07cc94b6752 /app/contexts
parent51b5509bacdfba1d3ca84a4b56c6bd21942f1d2e (diff)
downloadgitlab-ce-d9bb4230cc3aa161876df821c34d8e9c53d2e7a6.tar.gz
Adding authenticated public mode (internal).
Added visibility_level icons to project view (rather than just text). Added public projects to search results. Added ability to restrict visibility levels standard users can set.
Diffstat (limited to 'app/contexts')
-rw-r--r--app/contexts/projects/create_context.rb7
-rw-r--r--app/contexts/projects/update_context.rb6
-rw-r--r--app/contexts/search_context.rb9
3 files changed, 16 insertions, 6 deletions
diff --git a/app/contexts/projects/create_context.rb b/app/contexts/projects/create_context.rb
index 904c60a0f23..2acb9fbfe14 100644
--- a/app/contexts/projects/create_context.rb
+++ b/app/contexts/projects/create_context.rb
@@ -8,6 +8,11 @@ module Projects
# get namespace id
namespace_id = params.delete(:namespace_id)
+ # check that user is allowed to set specified visibility_level
+ unless Gitlab::VisibilityLevel.allowed_for?(current_user, params[:visibility_level])
+ params.delete(:visibility_level)
+ end
+
# Load default feature settings
default_features = Gitlab.config.gitlab.default_projects_features
@@ -17,7 +22,7 @@ module Projects
wall_enabled: default_features.wall,
snippets_enabled: default_features.snippets,
merge_requests_enabled: default_features.merge_requests,
- public: default_features.public
+ visibility_level: default_features.visibility_level
}.stringify_keys
@project = Project.new(default_opts.merge(params))
diff --git a/app/contexts/projects/update_context.rb b/app/contexts/projects/update_context.rb
index 9564dd94688..27d7a95724a 100644
--- a/app/contexts/projects/update_context.rb
+++ b/app/contexts/projects/update_context.rb
@@ -2,7 +2,11 @@ module Projects
class UpdateContext < BaseContext
def execute(role = :default)
params[:project].delete(:namespace_id)
- params[:project].delete(:public) unless can?(current_user, :change_public_mode, project)
+ # check that user is allowed to set specified visibility_level
+ unless can?(current_user, :change_visibility_level, project) && Gitlab::VisibilityLevel.allowed_for?(current_user, params[:project][:visibility_level])
+ params[:project].delete(:visibility_level)
+ end
+
new_branch = params[:project].delete(:default_branch)
if project.repository.exists? && new_branch != project.repository.root_ref
diff --git a/app/contexts/search_context.rb b/app/contexts/search_context.rb
index 2f9438f6bb4..5985ab1fb0c 100644
--- a/app/contexts/search_context.rb
+++ b/app/contexts/search_context.rb
@@ -1,8 +1,8 @@
class SearchContext
- attr_accessor :project_ids, :params
+ attr_accessor :project_ids, :current_user, :params
- def initialize(project_ids, params)
- @project_ids, @params = project_ids, params.dup
+ def initialize(project_ids, user, params)
+ @project_ids, @current_user, @params = project_ids, user, params.dup
end
def execute
@@ -10,7 +10,8 @@ class SearchContext
query = Shellwords.shellescape(query) if query.present?
return result unless query.present?
- result[:projects] = Project.where("projects.id in (?) OR projects.public = true", project_ids).search(query).limit(20)
+ visibility_levels = @current_user ? [ Gitlab::VisibilityLevel::INTERNAL, Gitlab::VisibilityLevel::PUBLIC ] : [ Gitlab::VisibilityLevel::PUBLIC ]
+ result[:projects] = Project.where("projects.id in (?) OR projects.visibility_level in (?)", project_ids, visibility_levels).search(query).limit(20)
# Search inside single project
single_project_search(Project.where(id: project_ids), query)