Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2016-12-29 03:00:10 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2016-12-29 03:00:10 +0300
commitc595b41881896e0987d66d9be8b307cfed97fd7d (patch)
treee74461388cf51806f050316a5045f5270b55104c /app/models/group.rb
parent7d0e63faffcbb818e686cb3d2dd1aefdbb957d4a (diff)
parent9f39953eaf5568eb75bd2ecf1bab230bbf13f330 (diff)
Merge branch 'dz-nested-group-access' into 'master'
Inherit permissions from parent group See merge request !8071
Diffstat (limited to 'app/models/group.rb')
-rw-r--r--app/models/group.rb18
1 files changed, 14 insertions, 4 deletions
diff --git a/app/models/group.rb b/app/models/group.rb
index 85696ad9747..9888b242e98 100644
--- a/app/models/group.rb
+++ b/app/models/group.rb
@@ -161,15 +161,17 @@ class Group < Namespace
end
def has_owner?(user)
- owners.include?(user)
+ members_with_parents.owners.where(user_id: user).any?
end
def has_master?(user)
- members.masters.where(user_id: user).any?
+ members_with_parents.masters.where(user_id: user).any?
end
+ # Check if user is a last owner of the group.
+ # Parent owners are ignored for nested groups.
def last_owner?(user)
- has_owner?(user) && owners.size == 1
+ owners.include?(user) && owners.size == 1
end
def avatar_type
@@ -195,6 +197,14 @@ class Group < Namespace
end
def refresh_members_authorized_projects
- UserProjectAccessChangedService.new(users.pluck(:id)).execute
+ UserProjectAccessChangedService.new(users_with_parents.pluck(:id)).execute
+ end
+
+ def members_with_parents
+ GroupMember.where(requested_at: nil, source_id: parents.map(&:id).push(id))
+ end
+
+ def users_with_parents
+ User.where(id: members_with_parents.select(:user_id))
end
end