Commit 37a90d5f authored by babatakao's avatar babatakao Committed by baba

Selectable deploy keys contain master projects

parent b9d989dc
...@@ -54,6 +54,6 @@ class DeployKeysController < ProjectResourceController ...@@ -54,6 +54,6 @@ class DeployKeysController < ProjectResourceController
protected protected
def available_keys def available_keys
@available_keys ||= current_user.owned_deploy_keys @available_keys ||= current_user.accessible_deploy_keys
end end
end end
...@@ -90,6 +90,8 @@ class User < ActiveRecord::Base ...@@ -90,6 +90,8 @@ class User < ActiveRecord::Base
has_many :personal_projects, through: :namespace, source: :projects has_many :personal_projects, through: :namespace, source: :projects
has_many :projects, through: :users_projects has_many :projects, through: :users_projects
has_many :master_projects, through: :users_projects, source: :project,
conditions: { users_projects: { project_access: UsersProject::MASTER } }
has_many :own_projects, foreign_key: :creator_id, class_name: 'Project' has_many :own_projects, foreign_key: :creator_id, class_name: 'Project'
has_many :owned_projects, through: :namespaces, source: :projects has_many :owned_projects, through: :namespaces, source: :projects
...@@ -354,7 +356,7 @@ class User < ActiveRecord::Base ...@@ -354,7 +356,7 @@ class User < ActiveRecord::Base
extern_uid && provider == 'ldap' extern_uid && provider == 'ldap'
end end
def owned_deploy_keys def accessible_deploy_keys
DeployKey.in_projects(self.owned_projects).uniq DeployKey.in_projects(self.master_projects).uniq
end end
end end
...@@ -35,6 +35,7 @@ class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps ...@@ -35,6 +35,7 @@ class Spinach::Features::ProjectDeployKeys < Spinach::FeatureSteps
step 'other project has deploy key' do step 'other project has deploy key' do
@second_project = create :project, namespace: current_user.namespace @second_project = create :project, namespace: current_user.namespace
@second_project.team << [current_user, :master]
create(:deploy_keys_project, project: @second_project) create(:deploy_keys_project, project: @second_project)
end end
......
...@@ -439,7 +439,7 @@ module API ...@@ -439,7 +439,7 @@ module API
end end
# Check for available deploy keys in other projects # Check for available deploy keys in other projects
key = current_user.owned_deploy_keys.find_by_key(attrs[:key]) key = current_user.accessible_deploy_keys.find_by_key(attrs[:key])
if key if key
user_project.deploy_keys << key user_project.deploy_keys << key
present key, with: Entities::SSHKey present key, with: Entities::SSHKey
......
...@@ -106,11 +106,33 @@ describe User do ...@@ -106,11 +106,33 @@ describe User do
ActiveRecord::Base.observers.enable(:user_observer) ActiveRecord::Base.observers.enable(:user_observer)
@user = create :user @user = create :user
@project = create :project, namespace: @user.namespace @project = create :project, namespace: @user.namespace
@project_2 = create :project # Grant MASTER access to the user
@project_3 = create :project # Grant DEVELOPER access to the user
UsersProject.add_users_into_projects(
[@project_2.id], [@user.id], UsersProject::MASTER
)
UsersProject.add_users_into_projects(
[@project_3.id], [@user.id], UsersProject::DEVELOPER
)
end end
it { @user.authorized_projects.should include(@project) } it { @user.authorized_projects.should include(@project) }
it { @user.authorized_projects.should include(@project_2) }
it { @user.authorized_projects.should include(@project_3) }
it { @user.owned_projects.should include(@project) } it { @user.owned_projects.should include(@project) }
it { @user.owned_projects.should_not include(@project_2) }
it { @user.owned_projects.should_not include(@project_3) }
it { @user.personal_projects.should include(@project) } it { @user.personal_projects.should include(@project) }
it { @user.personal_projects.should_not include(@project_2) }
it { @user.personal_projects.should_not include(@project_3) }
# master_projects doesn't check creator/namespace.
# In real case the users_projects relation will certainly be assigned
# when the project is created.
it { @user.master_projects.should_not include(@project) }
it { @user.master_projects.should include(@project_2) }
it { @user.master_projects.should_not include(@project_3) }
end end
describe 'groups' do describe 'groups' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment