Merge pull request #8703 from andrej-scinote/aj_SCI_12162

Fix global team shared objects on permission changes [SCI-12162]
This commit is contained in:
andrej-scinote 2025-07-24 14:19:49 +02:00 committed by GitHub
commit f114c356af
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 15 additions and 2 deletions

View file

@ -22,6 +22,18 @@ class TeamSharedObjectsController < ApplicationController
if @model.permission_level_changed?
@model.save!
@model.team_shared_objects.each(&:destroy!) unless global_permission_level == :not_shared
case global_permission_level
when :shared_read
UserAssignment.where(assignable: @model).where.not(team: @model.team).update!(user_role: UserRole.find_predefined_viewer_role)
TeamAssignment.where(assignable: @model).where.not(team: @model.team).update!(user_role: UserRole.find_predefined_viewer_role)
UserGroupAssignment.where(assignable: @model).where.not(team: @model.team).update!(user_role: UserRole.find_predefined_viewer_role)
when :not_shared
UserAssignment.where(assignable: @model).where.not(team: @model.team).destroy_all
TeamAssignment.where(assignable: @model).where.not(team: @model.team).destroy_all
UserGroupAssignment.where(assignable: @model).where.not(team: @model.team).destroy_all
end
case @model
when Repository
setup_repository_global_share_activity

View file

@ -2,7 +2,8 @@
module UserRolesHelper
def user_roles_collection(object, with_inherit: false)
if object.respond_to?(:private_shared_with_read?) && object.private_shared_with_read?(current_team)
if (object.respond_to?(:private_shared_with_read?) && object.private_shared_with_read?(current_team)) ||
(object.respond_to?(:shared_with_read?) && object.shared_with_read?(current_team))
viewer_role = UserRole.find_predefined_viewer_role
roles = [[viewer_role.name, viewer_role.id]]
else

View file

@ -108,6 +108,6 @@ module Shareable
def shared_with_read?(team)
return false if self.team == team
shared_read? || team_shared_objects.where(team: team, permission_level: :shared_read).any?
shared_read? || team_shared_objects.exists?(team: team, permission_level: :shared_read)
end
end