summaryrefslogtreecommitdiff
path: root/app/serializers/group_link
diff options
context:
space:
mode:
Diffstat (limited to 'app/serializers/group_link')
-rw-r--r--app/serializers/group_link/group_group_link_entity.rb16
-rw-r--r--app/serializers/group_link/group_link_entity.rb27
-rw-r--r--app/serializers/group_link/project_group_link_entity.rb12
3 files changed, 35 insertions, 20 deletions
diff --git a/app/serializers/group_link/group_group_link_entity.rb b/app/serializers/group_link/group_group_link_entity.rb
index cedc8bd8582..563a75ccdaa 100644
--- a/app/serializers/group_link/group_group_link_entity.rb
+++ b/app/serializers/group_link/group_group_link_entity.rb
@@ -4,22 +4,14 @@ module GroupLink
class GroupGroupLinkEntity < GroupLink::GroupLinkEntity
include RequestAwareEntity
- expose :can_update do |group_link|
- can_manage?(group_link)
- end
-
- expose :can_remove do |group_link|
- can_manage?(group_link)
+ expose :source do |group_link|
+ GroupEntity.represent(group_link.shared_from, only: [:id, :full_name, :web_url])
end
private
- def current_user
- options[:current_user]
- end
-
- def can_manage?(group_link)
- can?(current_user, :admin_group_member, group_link.shared_group)
+ def admin_permission_name
+ :admin_group_member
end
end
end
diff --git a/app/serializers/group_link/group_link_entity.rb b/app/serializers/group_link/group_link_entity.rb
index 12349320b6f..73c9931fc70 100644
--- a/app/serializers/group_link/group_link_entity.rb
+++ b/app/serializers/group_link/group_link_entity.rb
@@ -30,5 +30,32 @@ module GroupLink
expose :shared_with_group, merge: true, using: GroupBasicEntity
end
+
+ expose :can_update do |group_link, options|
+ can_admin_shared_from?(group_link, options)
+ end
+
+ expose :can_remove do |group_link, options|
+ can_admin_shared_from?(group_link, options)
+ end
+
+ expose :is_direct_member do |group_link, options|
+ direct_member?(group_link, options)
+ end
+
+ private
+
+ def current_user
+ options[:current_user]
+ end
+
+ def direct_member?(group_link, options)
+ group_link.shared_from == options[:source]
+ end
+
+ def can_admin_shared_from?(group_link, options)
+ direct_member?(group_link, options) &&
+ can?(current_user, admin_permission_name, group_link.shared_from)
+ end
end
end
diff --git a/app/serializers/group_link/project_group_link_entity.rb b/app/serializers/group_link/project_group_link_entity.rb
index bcdafd8d685..c667bcd5bf4 100644
--- a/app/serializers/group_link/project_group_link_entity.rb
+++ b/app/serializers/group_link/project_group_link_entity.rb
@@ -4,18 +4,14 @@ module GroupLink
class ProjectGroupLinkEntity < GroupLink::GroupLinkEntity
include RequestAwareEntity
- expose :can_update do |group_link|
- can?(current_user, :admin_project_member, group_link.project)
- end
-
- expose :can_remove do |group_link|
- can?(current_user, :admin_project_member, group_link.project)
+ expose :source do |group_link|
+ ProjectEntity.represent(group_link.shared_from, only: [:id, :full_name])
end
private
- def current_user
- options[:current_user]
+ def admin_permission_name
+ :admin_project_member
end
end
end