Commit 37a90d5f764231cd765ff38448c6d650e61a4012

Authored by babatakao
Committed by baba
1 parent b9d989dc

Selectable deploy keys contain master projects

app/controllers/deploy_keys_controller.rb
... ... @@ -54,6 +54,6 @@ class DeployKeysController < ProjectResourceController
54 54 protected
55 55  
56 56 def available_keys
57   - @available_keys ||= current_user.owned_deploy_keys
  57 + @available_keys ||= current_user.accessible_deploy_keys
58 58 end
59 59 end
... ...
app/models/user.rb
... ... @@ -90,6 +90,8 @@ class User < ActiveRecord::Base
90 90  
91 91 has_many :personal_projects, through: :namespace, source: :projects
92 92 has_many :projects, through: :users_projects
  93 + has_many :master_projects, through: :users_projects, source: :project,
  94 + conditions: { users_projects: { project_access: UsersProject::MASTER } }
93 95 has_many :own_projects, foreign_key: :creator_id, class_name: 'Project'
94 96 has_many :owned_projects, through: :namespaces, source: :projects
95 97  
... ... @@ -354,7 +356,7 @@ class User < ActiveRecord::Base
354 356 extern_uid && provider == 'ldap'
355 357 end
356 358  
357   - def owned_deploy_keys
358   - DeployKey.in_projects(self.owned_projects).uniq
  359 + def accessible_deploy_keys
  360 + DeployKey.in_projects(self.master_projects).uniq
359 361 end
360 362 end
... ...
features/steps/project/deploy_keys.rb
... ... @@ -35,6 +35,7 @@ class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps
35 35  
36 36 step 'other project has deploy key' do
37 37 @second_project = create :project, namespace: current_user.namespace
  38 + @second_project.team << [current_user, :master]
38 39 create(:deploy_keys_project, project: @second_project)
39 40 end
40 41  
... ...
lib/api/projects.rb
... ... @@ -439,7 +439,7 @@ module API
439 439 end
440 440  
441 441 # Check for available deploy keys in other projects
442   - key = current_user.owned_deploy_keys.find_by_key(attrs[:key])
  442 + key = current_user.accessible_deploy_keys.find_by_key(attrs[:key])
443 443 if key
444 444 user_project.deploy_keys << key
445 445 present key, with: Entities::SSHKey
... ...
spec/models/user_spec.rb
... ... @@ -106,11 +106,33 @@ describe User do
106 106 ActiveRecord::Base.observers.enable(:user_observer)
107 107 @user = create :user
108 108 @project = create :project, namespace: @user.namespace
  109 + @project_2 = create :project # Grant MASTER access to the user
  110 + @project_3 = create :project # Grant DEVELOPER access to the user
  111 +
  112 + UsersProject.add_users_into_projects(
  113 + [@project_2.id], [@user.id], UsersProject::MASTER
  114 + )
  115 + UsersProject.add_users_into_projects(
  116 + [@project_3.id], [@user.id], UsersProject::DEVELOPER
  117 + )
109 118 end
110 119  
111 120 it { @user.authorized_projects.should include(@project) }
  121 + it { @user.authorized_projects.should include(@project_2) }
  122 + it { @user.authorized_projects.should include(@project_3) }
112 123 it { @user.owned_projects.should include(@project) }
  124 + it { @user.owned_projects.should_not include(@project_2) }
  125 + it { @user.owned_projects.should_not include(@project_3) }
113 126 it { @user.personal_projects.should include(@project) }
  127 + it { @user.personal_projects.should_not include(@project_2) }
  128 + it { @user.personal_projects.should_not include(@project_3) }
  129 +
  130 + # master_projects doesn't check creator/namespace.
  131 + # In real case the users_projects relation will certainly be assigned
  132 + # when the project is created.
  133 + it { @user.master_projects.should_not include(@project) }
  134 + it { @user.master_projects.should include(@project_2) }
  135 + it { @user.master_projects.should_not include(@project_3) }
114 136 end
115 137  
116 138 describe 'groups' do
... ...