diff options
Diffstat (limited to 'app/serializers/group_link')
-rw-r--r-- | app/serializers/group_link/group_group_link_entity.rb | 16 | ||||
-rw-r--r-- | app/serializers/group_link/group_link_entity.rb | 27 | ||||
-rw-r--r-- | app/serializers/group_link/project_group_link_entity.rb | 12 |
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 |