Commit 573d367be5a61e9b344e48b6678cdd8067fe6bd1

Authored by Dmitriy Zaporozhets
1 parent 087d7e55

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
1 class Projects::HooksController < Projects::ApplicationController 1 class Projects::HooksController < Projects::ApplicationController
2 # Authorize 2 # Authorize
3 - before_filter :authorize_read_project!  
4 - before_filter :authorize_admin_project!, only: [:new, :create, :destroy] 3 + before_filter :authorize_admin_project!
5 4
6 respond_to :html 5 respond_to :html
7 6
app/controllers/projects/snippets_controller.rb
@@ -14,8 +14,6 @@ class Projects::SnippetsController &lt; Projects::ApplicationController @@ -14,8 +14,6 @@ class Projects::SnippetsController &lt; Projects::ApplicationController
14 # Allow destroy snippet 14 # Allow destroy snippet
15 before_filter :authorize_admin_project_snippet!, only: [:destroy] 15 before_filter :authorize_admin_project_snippet!, only: [:destroy]
16 16
17 - layout 'projects'  
18 -  
19 respond_to :html 17 respond_to :html
20 18
21 def index 19 def index
app/controllers/projects/team_members_controller.rb
1 class Projects::TeamMembersController < Projects::ApplicationController 1 class Projects::TeamMembersController < Projects::ApplicationController
2 # Authorize 2 # Authorize
3 - before_filter :authorize_read_project!  
4 - before_filter :authorize_admin_project!, except: [:index, :show] 3 + before_filter :authorize_admin_project!
5 4
6 layout "project_settings" 5 layout "project_settings"
7 6
app/controllers/projects_controller.rb
1 -class ProjectsController < Projects::ApplicationController 1 +class ProjectsController < ApplicationController
2 skip_before_filter :authenticate_user!, only: [:show] 2 skip_before_filter :authenticate_user!, only: [:show]
3 - skip_before_filter :project, only: [:new, :create]  
4 - skip_before_filter :repository, only: [:new, :create] 3 + before_filter :project, except: [:new, :create]
  4 + before_filter :repository, except: [:new, :create]
5 5
6 # Authorize 6 # Authorize
7 before_filter :authorize_read_project!, except: [:index, :new, :create] 7 before_filter :authorize_read_project!, except: [:index, :new, :create]
app/models/ability.rb
@@ -154,7 +154,7 @@ class Ability @@ -154,7 +154,7 @@ class Ability
154 def group_abilities user, group 154 def group_abilities user, group
155 rules = [] 155 rules = []
156 156
157 - if group.users.include?(user) 157 + if group.users.include?(user) || user.admin?
158 rules << :read_group 158 rules << :read_group
159 end 159 end
160 160
app/models/group.rb
@@ -32,6 +32,10 @@ class Group &lt; Namespace @@ -32,6 +32,10 @@ class Group &lt; Namespace
32 end 32 end
33 end 33 end
34 34
  35 + def add_user(user, group_access)
  36 + self.users_groups.create(user_id: user.id, group_access: group_access)
  37 + end
  38 +
35 def change_owner(user) 39 def change_owner(user)
36 self.owner = user 40 self.owner = user
37 membership = users_groups.where(user_id: user.id).first 41 membership = users_groups.where(user_id: user.id).first
app/views/projects/_clone_panel.html.haml
@@ -19,37 +19,38 @@ @@ -19,37 +19,38 @@
19 %i.icon-download-alt 19 %i.icon-download-alt
20 %span.only-wide Download 20 %span.only-wide Download
21 21
22 - .dropdown.pull-right  
23 - %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"}  
24 - %i.icon-plus-sign-alt  
25 - %span.only-wide New  
26 - %b.caret  
27 - %ul.dropdown-menu  
28 - - if @project.issues_enabled && can?(current_user, :write_issue, @project)  
29 - %li  
30 - = link_to url_for_new_issue, title: "New Issue" do  
31 - Issue  
32 - - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project)  
33 - %li  
34 - = link_to new_project_merge_request_path(@project), title: "New Merge Request" do  
35 - Merge Request  
36 - - if @project.snippets_enabled && can?(current_user, :write_snippet, @project)  
37 - %li  
38 - = link_to new_project_snippet_path(@project), title: "New Snippet" do  
39 - Snippet  
40 - - if can? current_user, :push_code, @project  
41 - %li.divider  
42 - %li  
43 - = link_to new_project_branch_path(@project) do  
44 - %i.icon-code-fork  
45 - Git branch  
46 - %li  
47 - = link_to new_project_tag_path(@project) do  
48 - %i.icon-tag  
49 - Git tag 22 + - if current_user
  23 + .dropdown.pull-right
  24 + %a.dropdown-toggle.btn{href: '#', "data-toggle" => "dropdown"}
  25 + %i.icon-plus-sign-alt
  26 + %span.only-wide New
  27 + %b.caret
  28 + %ul.dropdown-menu
  29 + - if @project.issues_enabled && can?(current_user, :write_issue, @project)
  30 + %li
  31 + = link_to url_for_new_issue, title: "New Issue" do
  32 + Issue
  33 + - if @project.merge_requests_enabled && can?(current_user, :write_merge_request, @project)
  34 + %li
  35 + = link_to new_project_merge_request_path(@project), title: "New Merge Request" do
  36 + Merge Request
  37 + - if @project.snippets_enabled && can?(current_user, :write_snippet, @project)
  38 + %li
  39 + = link_to new_project_snippet_path(@project), title: "New Snippet" do
  40 + Snippet
  41 + - if can? current_user, :push_code, @project
  42 + %li.divider
  43 + %li
  44 + = link_to new_project_branch_path(@project) do
  45 + %i.icon-code-fork
  46 + Git branch
  47 + %li
  48 + = link_to new_project_tag_path(@project) do
  49 + %i.icon-tag
  50 + Git tag
50 51
51 - - if can?(current_user, :admin_team_member, @project)  
52 - %li.divider  
53 - %li  
54 - = link_to new_project_team_member_path(@project), title: "New project member" do  
55 - Project member 52 + - if can?(current_user, :admin_team_member, @project)
  53 + %li.divider
  54 + %li
  55 + = link_to new_project_team_member_path(@project), title: "New project member" do
  56 + Project member