diff --git a/src/api/app/models/bs_request_permission_check.rb b/src/api/app/models/bs_request_permission_check.rb index 40c0bd1416c..32ff6abfbfd 100644 --- a/src/api/app/models/bs_request_permission_check.rb +++ b/src/api/app/models/bs_request_permission_check.rb @@ -109,6 +109,11 @@ def cmd_changestate_permissions(opts) if opts[:newstate].in?(['new', 'review', 'revoked', 'superseded']) && req.creator == User.session!.login # request creator can reopen, revoke or supersede a request which was declined permission_granted = true + elsif opts[:newstate] == 'revoked' && req.creator == opts[:override_creator] + # NOTE: request should be revoked if project is removed. + # override_creator is needed if the logged in user is different than the creator of the request + # at the time of removing the project. + permission_granted = true elsif req.state == :declined && opts[:newstate].in?(['new', 'review']) && (req.commenter == User.session!.login || user_is_staging_manager) # people who declined a request shall also be able to reopen it diff --git a/src/api/app/models/project.rb b/src/api/app/models/project.rb index 29703001ffb..b8a63bb19d7 100644 --- a/src/api/app/models/project.rb +++ b/src/api/app/models/project.rb @@ -492,7 +492,7 @@ def revoke_requests request.bs_request_actions.each do |action| if action.source_project == name begin - request.change_state(newstate: 'revoked', comment: "The source project '#{name}' has been removed") + request.change_state(newstate: 'revoked', comment: "The source project '#{name}' has been removed", override_creator: request.creator) rescue PostRequestNoPermission Airbrake.notify("#{User.session!.login} tried to revoke request #{request.number} but had no permissions") end