diff options
Diffstat (limited to 'app/serializers/group_link')
5 files changed, 95 insertions, 0 deletions
diff --git a/app/serializers/group_link/group_group_link_entity.rb b/app/serializers/group_link/group_group_link_entity.rb new file mode 100644 index 00000000000..cedc8bd8582 --- /dev/null +++ b/app/serializers/group_link/group_group_link_entity.rb @@ -0,0 +1,25 @@ +# frozen_string_literal: true + +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) + end + + private + + def current_user + options[:current_user] + end + + def can_manage?(group_link) + can?(current_user, :admin_group_member, group_link.shared_group) + end + end +end diff --git a/app/serializers/group_link/group_group_link_serializer.rb b/app/serializers/group_link/group_group_link_serializer.rb new file mode 100644 index 00000000000..1e3f861f09a --- /dev/null +++ b/app/serializers/group_link/group_group_link_serializer.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +module GroupLink + class GroupGroupLinkSerializer < BaseSerializer + entity GroupLink::GroupGroupLinkEntity + end +end diff --git a/app/serializers/group_link/group_link_entity.rb b/app/serializers/group_link/group_link_entity.rb new file mode 100644 index 00000000000..12349320b6f --- /dev/null +++ b/app/serializers/group_link/group_link_entity.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +module GroupLink + class GroupLinkEntity < Grape::Entity + include RequestAwareEntity + + expose :id + expose :created_at + expose :expires_at do |group_link| + group_link.expires_at&.to_time + end + + expose :access_level do + expose :human_access, as: :string_value + expose :group_access, as: :integer_value + end + + expose :valid_roles do |group_link| + group_link.class.access_options + end + + expose :shared_with_group do + expose :avatar_url do |group_link| + group_link.shared_with_group.avatar_url(only_path: false, size: Member::AVATAR_SIZE) + end + + expose :web_url do |group_link| + group_link.shared_with_group.web_url + end + + expose :shared_with_group, merge: true, using: GroupBasicEntity + 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 new file mode 100644 index 00000000000..2ff275fff01 --- /dev/null +++ b/app/serializers/group_link/project_group_link_entity.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +module GroupLink + class ProjectGroupLinkEntity < GroupLink::GroupLinkEntity + include RequestAwareEntity + include Projects::ProjectMembersHelper + + expose :can_update do |group_link| + can_manage_project_members?(group_link.project) + end + + expose :can_remove do |group_link| + can_manage_project_members?(group_link.project) + end + + private + + def current_user + options[:current_user] + end + end +end diff --git a/app/serializers/group_link/project_group_link_serializer.rb b/app/serializers/group_link/project_group_link_serializer.rb new file mode 100644 index 00000000000..b2559e61e31 --- /dev/null +++ b/app/serializers/group_link/project_group_link_serializer.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +module GroupLink + class ProjectGroupLinkSerializer < BaseSerializer + entity GroupLink::ProjectGroupLinkEntity + end +end |