diff options
author | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2012-11-29 07:29:11 +0300 |
---|---|---|
committer | Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com> | 2012-11-29 12:39:03 +0200 |
commit | eb1004f7890d25a86beb0ca0a7eca802d9fce665 (patch) | |
tree | 94cb713c0628542e646aad323be4d88fb1c356e3 /app/controllers | |
parent | a1ffc673b95f4d0e2316d461f1364fa1ee08e9d2 (diff) | |
download | gitlab-ce-eb1004f7890d25a86beb0ca0a7eca802d9fce665.tar.gz |
Refactor abilities. Added ProjectUpdate context. Fixed few bugs with namespaces
Diffstat (limited to 'app/controllers')
-rw-r--r-- | app/controllers/admin/projects_controller.rb | 8 | ||||
-rw-r--r-- | app/controllers/application_controller.rb | 13 | ||||
-rw-r--r-- | app/controllers/dashboard_controller.rb | 2 | ||||
-rw-r--r-- | app/controllers/groups_controller.rb | 9 | ||||
-rw-r--r-- | app/controllers/project_resource_controller.rb | 2 | ||||
-rw-r--r-- | app/controllers/projects_controller.rb | 14 |
6 files changed, 21 insertions, 27 deletions
diff --git a/app/controllers/admin/projects_controller.rb b/app/controllers/admin/projects_controller.rb index c3a419afd0f..e61f94f8cf3 100644 --- a/app/controllers/admin/projects_controller.rb +++ b/app/controllers/admin/projects_controller.rb @@ -24,13 +24,9 @@ class Admin::ProjectsController < AdminController end def update - owner_id = params[:project].delete(:owner_id) + status = ProjectUpdateContext.new(project, current_user, params).execute(:admin) - if owner_id - @project.owner = User.find(owner_id) - end - - if @project.update_attributes(params[:project], as: :admin) + if status redirect_to [:admin, @project], notice: 'Project was successfully updated.' else render action: "edit" diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 2be9a54da52..66f2e87de3e 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -2,6 +2,7 @@ class ApplicationController < ActionController::Base before_filter :authenticate_user! before_filter :reject_blocked! before_filter :set_current_user_for_observers + before_filter :add_abilities before_filter :dev_tools if Rails.env == 'development' protect_from_forgery @@ -65,11 +66,17 @@ class ApplicationController < ActionController::Base def project id = params[:project_id] || params[:id] - @project ||= current_user.projects.find_with_namespace(id) - @project || render_404 + @project = Project.find_with_namespace(id) + + if @project and can?(current_user, :read_project, @project) + @project + else + @project = nil + render_404 + end end - def add_project_abilities + def add_abilities abilities << Ability end diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 4f874a9654a..e01b586a394 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -5,7 +5,7 @@ class DashboardController < ApplicationController before_filter :event_filter, only: :index def index - @groups = Group.where(id: current_user.projects.pluck(:namespace_id)) + @groups = current_user.accessed_groups @projects = @projects.page(params[:page]).per(30) @events = Event.in_projects(current_user.project_ids) @events = @event_filter.apply_filter(@events) diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index c969f41ebda..6fd5de8abf9 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -4,7 +4,6 @@ class GroupsController < ApplicationController before_filter :group before_filter :projects - before_filter :add_project_abilities def show @events = Event.in_projects(project_ids).limit(20).offset(params[:offset] || 0) @@ -45,7 +44,7 @@ class GroupsController < ApplicationController end def people - @users = group.users.all + @users = group.users end protected @@ -55,7 +54,11 @@ class GroupsController < ApplicationController end def projects - @projects ||= current_user.projects_sorted_by_activity.where(namespace_id: @group.id) + @projects ||= if can?(current_user, :manage_group, @group) + @group.projects.all + else + current_user.projects_sorted_by_activity.where(namespace_id: @group.id) + end end def project_ids diff --git a/app/controllers/project_resource_controller.rb b/app/controllers/project_resource_controller.rb index d297bba635f..81bc3a91bd1 100644 --- a/app/controllers/project_resource_controller.rb +++ b/app/controllers/project_resource_controller.rb @@ -1,5 +1,3 @@ class ProjectResourceController < ApplicationController before_filter :project - # Authorize - before_filter :add_project_abilities end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index ed340691821..a6e7f1f93fb 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -34,20 +34,10 @@ class ProjectsController < ProjectResourceController end def update - if params[:project].has_key?(:namespace_id) - namespace_id = params[:project].delete(:namespace_id) - if namespace_id == Namespace.global_id and project.namespace.present? - # Transfer to global namespace from anyone - project.transfer(nil) - elsif namespace_id.present? and namespace_id.to_i != project.namespace_id - # Transfer to someone namespace - namespace = Namespace.find(namespace_id) - project.transfer(namespace) - end - end + status = ProjectUpdateContext.new(project, current_user, params).execute respond_to do |format| - if project.update_attributes(params[:project]) + if status flash[:notice] = 'Project was successfully updated.' format.html { redirect_to edit_project_path(project), notice: 'Project was successfully updated.' } format.js |