From cbb4c260c40779ba84c794dd68147c54f3de2f52 Mon Sep 17 00:00:00 2001 From: Ivan Kohler Date: Fri, 1 Jun 2012 17:15:27 -0700 Subject: RT 3.8.13 --- rt/lib/RT/Scrip_Overlay.pm | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'rt/lib/RT/Scrip_Overlay.pm') diff --git a/rt/lib/RT/Scrip_Overlay.pm b/rt/lib/RT/Scrip_Overlay.pm index e91f8d64d..c5615c52b 100644 --- a/rt/lib/RT/Scrip_Overlay.pm +++ b/rt/lib/RT/Scrip_Overlay.pm @@ -507,12 +507,42 @@ sub Commit { # does an acl check and then passes off the call sub _Set { my $self = shift; + my %args = ( + Field => undef, + Value => undef, + @_, + ); unless ( $self->CurrentUserHasRight('ModifyScrips') ) { $RT::Logger->debug( "CurrentUser can't modify Scrips for " . $self->Queue . "\n" ); return ( 0, $self->loc('Permission Denied') ); } + + if (exists $args{Value}) { + if ($args{Field} eq 'Queue') { + if ($args{Value}) { + # moving to another queue + my $queue = RT::Queue->new( $self->CurrentUser ); + $queue->Load($args{Value}); + unless ($queue->Id and $queue->CurrentUserHasRight('ModifyScrips')) { + return ( 0, $self->loc('Permission Denied') ); + } + } else { + # moving to global + unless ($self->CurrentUser->HasRight( Object => RT->System, Right => 'ModifyScrips' )) { + return ( 0, $self->loc('Permission Denied') ); + } + } + } + elsif ($args{Field} eq 'Template') { + my $template = RT::Template->new( $self->CurrentUser ); + $template->Load($args{Value}); + unless ($template->Id and $template->CurrentUserHasQueueRight('ShowTemplate')) { + return ( 0, $self->loc('Permission Denied') ); + } + } + } return $self->__Set(@_); } -- cgit v1.2.1