diff options
-rw-r--r-- | app/helpers/namespaces_helper.rb | 4 | ||||
-rw-r--r-- | app/models/user.rb | 29 | ||||
-rw-r--r-- | spec/models/user_spec.rb | 2 |
3 files changed, 17 insertions, 18 deletions
diff --git a/app/helpers/namespaces_helper.rb b/app/helpers/namespaces_helper.rb index dc88e178360..f7979c8b641 100644 --- a/app/helpers/namespaces_helper.rb +++ b/app/helpers/namespaces_helper.rb @@ -1,7 +1,7 @@ module NamespacesHelper def namespaces_options(selected = :current_user, scope = :default) - groups = current_user.owned_groups.select {|n| n.type == 'Group'} - users = current_user.namespaces.reject {|n| n.type == 'Group'} + groups = current_user.owned_groups + users = [current_user.namespace] group_opts = ["Groups", groups.sort_by(&:human_name).map {|g| [g.human_name, g.id]} ] users_opts = [ "Users", users.sort_by(&:human_name).map {|u| [u.human_name, u.id]} ] diff --git a/app/models/user.rb b/app/models/user.rb index 7ef3b3f9e1a..ce8c88ca69e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -69,20 +69,20 @@ class User < ActiveRecord::Base # Namespace for personal projects has_one :namespace, dependent: :destroy, foreign_key: :owner_id, class_name: "Namespace", conditions: 'type IS NULL' - # Namespaces (owned groups and own namespace) - has_many :namespaces, foreign_key: :owner_id - # Profile has_many :keys, dependent: :destroy # Groups - has_many :own_groups, class_name: "Group", foreign_key: :owner_id - has_many :owned_groups, through: :users_groups, source: :group, conditions: { users_groups: { group_access: UsersGroup::OWNER } } - has_many :users_groups, dependent: :destroy has_many :groups, through: :users_groups + has_many :owned_groups, through: :users_groups, source: :group, conditions: { users_groups: { group_access: UsersGroup::OWNER } } # Projects + has_many :groups_projects, through: :groups, source: :projects + has_many :personal_projects, through: :namespace, source: :projects + has_many :projects, through: :users_projects + has_many :created_projects, foreign_key: :creator_id, class_name: 'Project' + has_many :snippets, dependent: :destroy, foreign_key: :author_id, class_name: "Snippet" has_many :users_projects, dependent: :destroy has_many :issues, dependent: :destroy, foreign_key: :author_id @@ -93,11 +93,6 @@ class User < ActiveRecord::Base has_many :assigned_issues, dependent: :destroy, foreign_key: :assignee_id, class_name: "Issue" has_many :assigned_merge_requests, dependent: :destroy, foreign_key: :assignee_id, class_name: "MergeRequest" - has_many :groups_projects, through: :groups, source: :projects - has_many :personal_projects, through: :namespace, source: :projects - has_many :projects, through: :users_projects - has_many :own_projects, foreign_key: :creator_id, class_name: 'Project' - has_many :owned_projects, through: :namespaces, source: :projects # # Validations @@ -247,7 +242,7 @@ class User < ActiveRecord::Base # Groups user has access to def authorized_groups @authorized_groups ||= begin - group_ids = (groups.pluck(:id) + own_groups.pluck(:id) + authorized_projects.pluck(:namespace_id)) + group_ids = (groups.pluck(:id) + authorized_projects.pluck(:namespace_id)) Group.where(id: group_ids).order('namespaces.name ASC') end end @@ -256,11 +251,17 @@ class User < ActiveRecord::Base # Projects user has access to def authorized_projects @authorized_projects ||= begin - project_ids = (owned_projects.pluck(:id) + groups_projects.pluck(:id) + projects.pluck(:id)).uniq + project_ids = (personal_projects.pluck(:id) + groups_projects.pluck(:id) + projects.pluck(:id)).uniq Project.where(id: project_ids).joins(:namespace).order('namespaces.name ASC') end end + def owned_projects + @owned_projects ||= begin + Project.where(namespace_id: owned_groups.pluck(:id).push(namespace.id)).joins(:namespace) + end + end + # Team membership in authorized projects def tm_in_authorized_projects UsersProject.where(project_id: authorized_projects.map(&:id), user_id: self.id) @@ -333,7 +334,7 @@ class User < ActiveRecord::Base end def several_namespaces? - namespaces.many? || owned_groups.any? + owned_groups.any? end def namespace_id diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index f6c9f82c4ee..66493a8d22d 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -135,7 +135,6 @@ describe User do end it { @user.several_namespaces?.should be_true } - it { @user.namespaces.should include(@user.namespace) } it { @user.authorized_groups.should == [@group] } it { @user.owned_groups.should == [@group] } end @@ -162,7 +161,6 @@ describe User do end it { @user.several_namespaces?.should be_false } - it { @user.namespaces.should == [@user.namespace] } end describe 'blocking user' do |