summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james.lopez@vodafone.com>2015-11-11 15:42:27 +0000
committerJames Lopez <james.lopez@vodafone.com>2015-11-11 15:42:27 +0000
commitc6a0f109cd393e951f4d700b06490d819e6792ba (patch)
treeec1f42eb32ef8a8e8a047ba2b2788eea020c05d0
parent1b14bc59570a625365fef232f8c57919f76b3e2a (diff)
downloadgitlab-ce-c6a0f109cd393e951f4d700b06490d819e6792ba.tar.gz
refactored code as projects only have one owner. Kept some refactoring in place (has_owners concern)
-rw-r--r--app/models/ability.rb52
-rw-r--r--app/models/concerns/has_owners.rb4
-rw-r--r--app/models/group.rb6
-rw-r--r--app/models/member.rb13
4 files changed, 35 insertions, 40 deletions
diff --git a/app/models/ability.rb b/app/models/ability.rb
index 5beead0b75d..b46c4943bf5 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -6,17 +6,17 @@ class Ability
return [] if user.blocked?
case subject.class.name
- when "Project" then project_abilities(user, subject)
- when "Issue" then issue_abilities(user, subject)
- when "Note" then note_abilities(user, subject)
- when "ProjectSnippet" then project_snippet_abilities(user, subject)
- when "PersonalSnippet" then personal_snippet_abilities(user, subject)
- when "MergeRequest" then merge_request_abilities(user, subject)
- when "Group" then group_abilities(user, subject)
- when "Namespace" then namespace_abilities(user, subject)
- when "GroupMember" then group_member_abilities(user, subject)
- when "ProjectMember" then project_member_abilities(user, subject)
- else []
+ when "Project" then project_abilities(user, subject)
+ when "Issue" then issue_abilities(user, subject)
+ when "Note" then note_abilities(user, subject)
+ when "ProjectSnippet" then project_snippet_abilities(user, subject)
+ when "PersonalSnippet" then personal_snippet_abilities(user, subject)
+ when "MergeRequest" then merge_request_abilities(user, subject)
+ when "Group" then group_abilities(user, subject)
+ when "Namespace" then namespace_abilities(user, subject)
+ when "GroupMember" then group_member_abilities(user, subject)
+ when "ProjectMember" then project_member_abilities(user, subject)
+ else []
end.concat(global_abilities(user))
end
@@ -232,17 +232,17 @@ class Ability
# Only group masters and group owners can create new projects in group
if group.has_master?(user) || group.has_owner?(user) || user.admin?
rules.push(*[
- :create_projects,
- ])
+ :create_projects,
+ ])
end
# Only group owner and administrators can admin group
if group.has_owner?(user) || user.admin?
rules.push(*[
- :admin_group,
- :admin_namespace,
- :admin_group_member
- ])
+ :admin_group,
+ :admin_namespace,
+ :admin_group_member
+ ])
end
rules.flatten
@@ -254,9 +254,9 @@ class Ability
# Only namespace owner and administrators can admin it
if namespace.owner == user || user.admin?
rules.push(*[
- :create_projects,
- :admin_namespace
- ])
+ :create_projects,
+ :admin_namespace
+ ])
end
rules.flatten
@@ -323,12 +323,12 @@ class Ability
project = subject.project
can_manage = project_abilities(user, project).include?(:admin_project_member)
- if can_manage && (user != target_user)
+ if can_manage && user != target_user && target_user != project.owner
rules << :update_project_member
rules << :destroy_project_member
end
- if !project.last_owner?(user) && (can_manage || (user == target_user))
+ if user == target_user && target_user != project.owner
rules << :destroy_project_member
end
rules
@@ -336,10 +336,10 @@ class Ability
def abilities
@abilities ||= begin
- abilities = Six.new
- abilities << self
- abilities
- end
+ abilities = Six.new
+ abilities << self
+ abilities
+ end
end
private
diff --git a/app/models/concerns/has_owners.rb b/app/models/concerns/has_owners.rb
index 735b2071721..07f3428b481 100644
--- a/app/models/concerns/has_owners.rb
+++ b/app/models/concerns/has_owners.rb
@@ -6,10 +6,10 @@ module HasOwners
extend ActiveSupport::Concern
def owners
- @owners ||= my_members.owners.includes(:user).map(&:user)
+ @owners ||= members.owners.includes(:user).map(&:user)
end
- def my_members
+ def members
raise NotImplementedError, "Expected my_members to be defined in #{self.class.name}"
end
diff --git a/app/models/group.rb b/app/models/group.rb
index c9806f6fd6f..9503d8b0f1c 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -22,7 +22,7 @@ class Group < Namespace
include HasOwners
has_many :group_members, dependent: :destroy, as: :source, class_name: 'GroupMember'
- alias_method :my_members, :group_members
+ alias_method :members, :group_members
has_many :users, through: :group_members
validate :avatar_type, if: ->(user) { user.avatar.present? && user.avatar_changed? }
@@ -91,10 +91,6 @@ class Group < Namespace
add_user(user, Gitlab::Access::MASTER, current_user)
end
- def members
- group_members
- end
-
def avatar_type
unless self.avatar.image?
self.errors.add :avatar, "only images allowed"
diff --git a/app/models/member.rb b/app/models/member.rb
index c565ee6bbce..30160c813e1 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -30,13 +30,13 @@ class Member < ActiveRecord::Base
validates :user, presence: true, unless: :invite?
validates :source, presence: true
- validates :user_id, uniqueness: { scope: [:source_type, :source_id],
+ validates :user_id, uniqueness: { scope: [:source_type, :source_id],
message: "already exists in source",
allow_nil: true }
validates :access_level, inclusion: { in: Gitlab::Access.all_values }, presence: true
- validates :invite_email, presence: { if: :invite? },
- email: { strict_mode: true, allow_nil: true },
- uniqueness: { scope: [:source_type, :source_id], allow_nil: true }
+ validates :invite_email, presence: { if: :invite? },
+ email: { strict_mode: true, allow_nil: true },
+ uniqueness: { scope: [:source_type, :source_id], allow_nil: true }
scope :invite, -> { where(user_id: nil) }
scope :non_invite, -> { where("user_id IS NOT NULL") }
@@ -94,8 +94,7 @@ class Member < ActiveRecord::Base
def can_update_member?(current_user, member)
!current_user || current_user.can?(:update_group_member, member) ||
- (member.respond_to?(:project) &&
- current_user.can?(:update_project_member, member))
+ current_user.can?(:update_project_member, member)
end
end
@@ -105,7 +104,7 @@ class Member < ActiveRecord::Base
def accept_invite!(new_user)
return false unless invite?
-
+
self.invite_token = nil
self.invite_accepted_at = Time.now.utc