summaryrefslogtreecommitdiff
path: root/app/serializers/group_link/group_link_entity.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/serializers/group_link/group_link_entity.rb')
-rw-r--r--app/serializers/group_link/group_link_entity.rb27
1 files changed, 27 insertions, 0 deletions
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