Commit 1b8f082061e3f120ab02b263cb68e3433b028ef6

Authored by Dmitriy Zaporozhets
1 parent 68154e8f

new access rights implemented

app/controllers/projects_controller.rb
... ... @@ -30,7 +30,7 @@ class ProjectsController < ApplicationController
30 30  
31 31 Project.transaction do
32 32 @project.save!
33   - @project.users_projects.create!(:admin => true, :read => true, :write => true, :user => current_user)
  33 + @project.users_projects.create!(:repo_access => Repository::REPO_RW , :project_access => Project::PROJECT_RWA, :user => current_user)
34 34  
35 35 # when project saved no team member exist so
36 36 # project repository should be updated after first user add
... ...
app/views/admin/projects/show.html.haml
... ... @@ -43,18 +43,17 @@
43 43 %tr
44 44 %th Name
45 45 %th Added
46   - %th Web
47   - %th Git
48   - %th Admin
  46 + %th Project Access
  47 + %th Repository Access
49 48 %th
50 49  
51 50 - @admin_project.users_projects.each do |tm|
52 51 %tr
53   - %td= link_to tm.user_name, admin_team_member_path(tm)
  52 + %td
  53 + = link_to tm.user_name, admin_team_member_path(tm)
54 54 %td= time_ago_in_words(tm.updated_at) + " ago"
55   - %td= check_box_tag "read", 1, @admin_project.readers.include?(tm.user), :disabled => :disabled
56   - %td= check_box_tag "commit", 1, @admin_project.writers.include?(tm.user), :disabled => :disabled
57   - %td.span-2= check_box_tag "admin", 1, @admin_project.admins.include?(tm.user), :disabled => :disabled
  55 + %td= select_tag :project_access, options_for_select(Project.access_options, tm.project_access), :class => "project-access-select", :disabled => :disabled
  56 + %td= select_tag :repo_access, options_for_select(Repository.access_options, tm.repo_access), :class => "repo-access-select", :disabled => :disabled
58 57 %td= link_to 'Destroy', admin_team_member_path(tm), :confirm => 'Are you sure?', :method => :delete
59 58  
60 59 = link_to 'New Team Member', new_admin_team_member_path(:team_member => {:project_id => @admin_project.id}), :class => "grey-button"
... ...
app/views/admin/team_members/_form.html.haml
... ... @@ -17,21 +17,26 @@
17 17 = f.select :project_id, Project.all.map { |user| [user.name, user.id] }
18 18  
19 19 .span-6
20   - %b Access:
  20 + %b Project Access:
21 21 .span-6
22   - = f.check_box :read
23   - Web Access (Browse Repo)
  22 + = f.select :project_access, options_for_select(Project.access_options, @admin_team_member.project_access), {}, :class => "project-access-select"
  23 +
24 24 .span-6
25   - = f.check_box :write
26   - Git Access (User will be added to commiters list)
  25 + %b Repository Access:
27 26 .span-6
28   - = f.check_box :admin
29   - Admin (Can manage project)
  27 + = f.select :repo_access, options_for_select(Repository.access_options, @admin_team_member.repo_access), {}, :class => "repo-access-select"
30 28 %br
31 29 .actions
32 30 = f.submit 'Save', :class => "grey-button"
33 31  
  32 +:css
  33 + form select {
  34 + width:300px;
  35 + }
  36 +
34 37 :javascript
35   - $('select#team_member_user_id').selectmenu({width:300});
36   - $('select#team_member_project_id').selectmenu({width:300});
  38 + $('select#team_member_user_id').chosen();
  39 + $('select#team_member_project_id').chosen();
  40 + $('select#team_member_repo_access').chosen();
  41 + $('select#team_member_project_access').chosen();
37 42  
... ...
app/views/admin/team_members/index.html.haml
... ... @@ -3,21 +3,21 @@
3 3 %table
4 4 %thead
5 5 %th Name
6   - %th Email
7   - %th Read
8   - %th Git
9   - %th Manage
  6 + %th Project Access
  7 + %th Repo Access
10 8 %th Added
11 9 %th
12 10 %th
13 11 - members.each do |tm|
14 12 - user = tm.user
15 13 %tr
16   - %td.span-6= link_to tm.user_name, admin_team_member_path(tm)
17   - %td.span-6= tm.user_email
18   - %td.span-1= check_box_tag "read", 1, project.readers.include?(user), :disabled => :disabled
19   - %td.span-1= check_box_tag "commit", 1, project.writers.include?(user), :disabled => :disabled
20   - %td.span-2= check_box_tag "admin", 1, project.admins.include?(user), :disabled => :disabled
  14 + %td.span-6
  15 + = link_to tm.user_name, admin_team_member_path(tm)
  16 + %br
  17 + %br
  18 + = tm.user_email
  19 + %td.span-3= select_tag :project_access, options_for_select(Project.access_options, tm.project_access), :class => "project-access-select", :disabled => :disabled
  20 + %td.span-3= select_tag :repo_access, options_for_select(Repository.access_options, tm.repo_access), :class => "repo-access-select", :disabled => :disabled
21 21 %td.span-3= time_ago_in_words(tm.updated_at) + " ago"
22 22 %td= link_to 'Edit', edit_admin_team_member_path(tm), :id => "edit_#{dom_id(tm)}"
23 23 %td= link_to 'Destroy', admin_team_member_path(tm), :confirm => 'Are you sure?', :method => :delete
... ...
app/views/admin/team_members/show.html.haml
... ... @@ -11,19 +11,13 @@
11 11  
12 12 #infoblock
13 13 .span-6
14   - %b Access:
15   - %br
16   - .span-6
17   - = check_box_tag "read", 1, @admin_team_member.read, :disabled => :disabled
18   - Web Access (Browse Repo)
  14 + %b Project Access:
  15 + = select_tag :project_access, options_for_select(Project.access_options, @admin_team_member.project_access), :class => "project-access-select", :disabled => true
  16 +
19 17 %br
20 18 .span-6
21   - = check_box_tag "commit", 1, @admin_team_member.write, :disabled => :disabled
22   - Git Access (User will be added to commiters list)
23   - %br
24   - .span-6.append-bottom
25   - = check_box_tag "admin", 1, @admin_team_member.admin, :disabled => :disabled
26   - Admin (Can manage project)
  19 + %b Repository Access:
  20 + = select_tag :repo_access, options_for_select(Repository.access_options, @admin_team_member.repo_access), :class => "repo-access-select", :disabled => true
27 21  
28 22 %br
29 23  
... ...
app/views/admin/users/show.html.haml
... ... @@ -51,9 +51,8 @@
51 51 %thead
52 52 %th Name
53 53 %th Added
54   - %th Web
55   - %th Git
56   - %th Admin
  54 + %th Project Access
  55 + %th Repository Access
57 56 %th
58 57 %th
59 58  
... ... @@ -62,9 +61,8 @@
62 61 %tr
63 62 %td= link_to project.name, admin_project_path(project)
64 63 %td= time_ago_in_words(tm.updated_at) + " ago"
65   - %td= check_box_tag "read", 1, project.readers.include?(@admin_user), :disabled => :disabled
66   - %td= check_box_tag "commit", 1, project.writers.include?(@admin_usertm), :disabled => :disabled
67   - %td.span-2= check_box_tag "admin", 1, project.admins.include?(@admin_user), :disabled => :disabled
  64 + %td= select_tag :project_access, options_for_select(Project.access_options, tm.project_access), :class => "project-access-select", :disabled => :disabled
  65 + %td= select_tag :repo_access, options_for_select(Repository.access_options, tm.repo_access), :class => "repo-access-select", :disabled => :disabled
68 66 %td= link_to 'Edit', edit_admin_team_member_path(tm)
69 67 %td= link_to 'Cancel', admin_team_member_path(tm), :confirm => 'Are you sure?', :method => :delete
70 68  
... ...
app/views/projects/_team.html.haml
... ... @@ -14,7 +14,7 @@
14 14  
15 15 :javascript
16 16 $(function(){
17   - $('.repo-access-select, .project-access-select').live("change", function() {
  17 + $('#team-table .repo-access-select, #team-table .project-access-select').live("change", function() {
18 18 $(this.form).submit();
19 19 });
20 20 })
... ...
app/views/team_members/_form.html.haml
... ... @@ -10,16 +10,15 @@
10 10 .span-6
11 11 = f.select(:user_id, User.not_in_project(@project).all.collect {|p| [ p.name, p.id ] }, { :include_blank => "Select user" }, { :style => "width:300px" })
12 12 .span-6
13   - %b Access:
  13 + %b Project Access:
14 14 .span-6
15   - = f.check_box :read
16   - Web Access
  15 + = f.select :project_access, options_for_select(Project.access_options, @team_member.project_access), {}, :class => "project-access-select"
  16 +
17 17 .span-6
18   - = f.check_box :write
19   - Git Access
20   - .span-6.append-bottom
21   - = f.check_box :admin
22   - Admin
  18 + %b Repository Access:
  19 + .span-6
  20 + = f.select :repo_access, options_for_select(Repository.access_options, @team_member.repo_access), {}, :class => "repo-access-select"
23 21 %br
24 22 .span-6
25 23 = f.submit 'Save', :class => "grey-button"
  24 +
... ...
app/views/team_members/new.js.haml
... ... @@ -12,4 +12,5 @@
12 12 modal: true
13 13  
14 14 });
15   - $('select#team_member_user_id').chosen();
  15 +
  16 + $('#team_member_new select#team_member_user_id').chosen();
... ...
spec/models/note_spec.rb
... ... @@ -31,9 +31,9 @@ describe Note do
31 31  
32 32 describe :read do
33 33 before do
34   - @p1.users_projects.create(:user => @u1, :read => false)
35   - @p1.users_projects.create(:user => @u2, :read => true)
36   - @p2.users_projects.create(:user => @u3, :read => true)
  34 + @p1.users_projects.create(:user => @u1, :project_access => Project::PROJECT_N)
  35 + @p1.users_projects.create(:user => @u2, :project_access => Project::PROJECT_R)
  36 + @p2.users_projects.create(:user => @u3, :project_access => Project::PROJECT_R)
37 37 end
38 38  
39 39 it { @abilities.allowed?(@u1, :read_note, @p1).should be_false }
... ... @@ -43,9 +43,9 @@ describe Note do
43 43  
44 44 describe :write do
45 45 before do
46   - @p1.users_projects.create(:user => @u1, :write => false)
47   - @p1.users_projects.create(:user => @u2, :write => true)
48   - @p2.users_projects.create(:user => @u3, :write => true)
  46 + @p1.users_projects.create(:user => @u1, :project_access => Project::PROJECT_R)
  47 + @p1.users_projects.create(:user => @u2, :project_access => Project::PROJECT_RW)
  48 + @p2.users_projects.create(:user => @u3, :project_access => Project::PROJECT_RW)
49 49 end
50 50  
51 51 it { @abilities.allowed?(@u1, :write_note, @p1).should be_false }
... ... @@ -55,9 +55,9 @@ describe Note do
55 55  
56 56 describe :admin do
57 57 before do
58   - @p1.users_projects.create(:user => @u1, :admin => false)
59   - @p1.users_projects.create(:user => @u2, :admin => true)
60   - @p2.users_projects.create(:user => @u3, :admin => true)
  58 + @p1.users_projects.create(:user => @u1, :project_access => Project::PROJECT_R)
  59 + @p1.users_projects.create(:user => @u2, :project_access => Project::PROJECT_RWA)
  60 + @p2.users_projects.create(:user => @u3, :project_access => Project::PROJECT_RWA)
61 61 end
62 62  
63 63 it { @abilities.allowed?(@u1, :admin_note, @p1).should be_false }
... ...
spec/requests/team_members_spec.rb
... ... @@ -32,11 +32,10 @@ describe "TeamMembers" do
32 32 describe "fill in" do
33 33 before do
34 34 page.execute_script("$('#team_member_user_id').show();")
35   - select @user_1.name, :from => "team_member_user_id"
36   -
37   - within "#team_member_new" do
38   - check "team_member_read"
39   - check "team_member_write"
  35 + within "#team_member_new" do
  36 + select @user_1.name, :from => "team_member_user_id"
  37 + select "Report", :from => "team_member_project_access"
  38 + select "Pull", :from => "team_member_repo_access"
40 39 end
41 40 end
42 41  
... ... @@ -48,20 +47,9 @@ describe "TeamMembers" do
48 47  
49 48 page.should have_content @user_1.name
50 49  
51   - @member.read.should be_true
52   - @member.write.should be_true
53   - @member.admin.should be_false
54   - end
55   -
56   - it "should not allow creation without access selected" do
57   - within "#team_member_new" do
58   - uncheck "team_member_read"
59   - uncheck "team_member_write"
60   - uncheck "team_member_admin"
61   - end
62   -
63   - expect { click_button "Save" }.to_not change {UsersProject.count}
64   - page.should have_content("Please choose at least one Role in the Access list")
  50 + @member.reload
  51 + @member.project_access.should == Project::PROJECT_RW
  52 + @member.repo_access.should == Repository::REPO_R
65 53 end
66 54 end
67 55 end
... ...