From 573d367be5a61e9b344e48b6678cdd8067fe6bd1 Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Wed, 25 Sep 2013 14:05:35 +0300 Subject: [PATCH] Modify permissions for project and group * Hooks and team pages allowed only for masters/owners * Group page allowed for admin * Corrent authentication for Projects controller * Hide some project elements from visitor --- app/controllers/projects/hooks_controller.rb | 3 +- app/controllers/projects/snippets_controller.rb | 2 - .../projects/team_members_controller.rb | 3 +- app/controllers/projects_controller.rb | 6 +- app/models/ability.rb | 2 +- app/models/group.rb | 4 ++ app/views/projects/_clone_panel.html.haml | 67 +++++++++++----------- 7 files changed, 44 insertions(+), 43 deletions(-) diff --git a/app/controllers/projects/hooks_controller.rb b/app/controllers/projects/hooks_controller.rb index 3367ddb5d..1a94dbab5 100644 --- a/app/controllers/projects/hooks_controller.rb +++ b/app/controllers/projects/hooks_controller.rb @@ -1,7 +1,6 @@ class Projects::HooksController < Projects::ApplicationController # Authorize - before_filter :authorize_read_project! - before_filter :authorize_admin_project!, only: [:new, :create, :destroy] + before_filter :authorize_admin_project! respond_to :html diff --git a/app/controllers/projects/snippets_controller.rb b/app/controllers/projects/snippets_controller.rb index 59063103e..dd0c1a570 100644 --- a/app/controllers/projects/snippets_controller.rb +++ b/app/controllers/projects/snippets_controller.rb @@ -14,8 +14,6 @@ class Projects::SnippetsController < Projects::ApplicationController # Allow destroy snippet before_filter :authorize_admin_project_snippet!, only: [:destroy] - layout 'projects' - respond_to :html def index diff --git a/app/controllers/projects/team_members_controller.rb b/app/controllers/projects/team_members_controller.rb index 6fee770ca..b4b318fa5 100644 --- a/app/controllers/projects/team_members_controller.rb +++ b/app/controllers/projects/team_members_controller.rb @@ -1,7 +1,6 @@ class Projects::TeamMembersController < Projects::ApplicationController # Authorize - before_filter :authorize_read_project! - before_filter :authorize_admin_project!, except: [:index, :show] + before_filter :authorize_admin_project! layout "project_settings" diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index f31fb666e..726412869 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -1,7 +1,7 @@ -class ProjectsController < Projects::ApplicationController +class ProjectsController < ApplicationController skip_before_filter :authenticate_user!, only: [:show] - skip_before_filter :project, only: [:new, :create] - skip_before_filter :repository, only: [:new, :create] + before_filter :project, except: [:new, :create] + before_filter :repository, except: [:new, :create] # Authorize before_filter :authorize_read_project!, except: [:index, :new, :create] diff --git a/app/models/ability.rb b/app/models/ability.rb index 26988c5e6..ad070dad2 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -154,7 +154,7 @@ class Ability def group_abilities user, group rules = [] - if group.users.include?(user) + if group.users.include?(user) || user.admin? rules << :read_group end diff --git a/app/models/group.rb b/app/models/group.rb index fce8d7121..0b36c9343 100644 --- a/app/models/group.rb +++ b/app/models/group.rb @@ -32,6 +32,10 @@ class Group < Namespace end end + def add_user(user, group_access) + self.users_groups.create(user_id: user.id, group_access: group_access) + end + def change_owner(user) self.owner = user membership = users_groups.where(user_id: user.id).first diff --git a/app/views/projects/_clone_panel.html.haml b/app/views/projects/_clone_panel.html.haml index c5ab64505..c2f85e8eb 100644 --- a/app/views/projects/_clone_panel.html.haml +++ b/app/views/projects/_clone_panel.html.haml @@ -19,37 +19,38 @@ %i.icon-download-alt %span.only-wide Download - .dropdown.pull-right - %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} - %i.icon-plus-sign-alt - %span.only-wide New - %b.caret - %ul.dropdown-menu - - if @project.issues_enabled && can?(current_user, :write_issue, @project) - %li - = link_to url_for_new_issue, title: "New Issue" do - Issue - - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project) - %li - = link_to new_project_merge_request_path(@project), title: "New Merge Request" do - Merge Request - - if @project.snippets_enabled && can?(current_user, :write_snippet, @project) - %li - = link_to new_project_snippet_path(@project), title: "New Snippet" do - Snippet - - if can? current_user, :push_code, @project - %li.divider - %li - = link_to new_project_branch_path(@project) do - %i.icon-code-fork - Git branch - %li - = link_to new_project_tag_path(@project) do - %i.icon-tag - Git tag + - if current_user + .dropdown.pull-right + %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"} + %i.icon-plus-sign-alt + %span.only-wide New + %b.caret + %ul.dropdown-menu + - if @project.issues_enabled && can?(current_user, :write_issue, @project) + %li + = link_to url_for_new_issue, title: "New Issue" do + Issue + - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project) + %li + = link_to new_project_merge_request_path(@project), title: "New Merge Request" do + Merge Request + - if @project.snippets_enabled && can?(current_user, :write_snippet, @project) + %li + = link_to new_project_snippet_path(@project), title: "New Snippet" do + Snippet + - if can? current_user, :push_code, @project + %li.divider + %li + = link_to new_project_branch_path(@project) do + %i.icon-code-fork + Git branch + %li + = link_to new_project_tag_path(@project) do + %i.icon-tag + Git tag - - if can?(current_user, :admin_team_member, @project) - %li.divider - %li - = link_to new_project_team_member_path(@project), title: "New project member" do - Project member + - if can?(current_user, :admin_team_member, @project) + %li.divider + %li + = link_to new_project_team_member_path(@project), title: "New project member" do + Project member -- 2.11.0